Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menguraikan struktur dan sintaks file Bicep. Di sini akan disajikan berbagai bagian file dan properti yang tersedia di bagian tersebut.
Untuk mengetahui tutorial langkah demi langkah yang memandu Anda melalui proses pembuatan file Bicep, lihat Mulai cepat: Membuat file Bicep dengan Visual Studio Code.
Pembatasan yang diketahui
- Bahasa Bicep tidak mendukung konsep
apiProfile. Konsep ini memetakan satuapiProfileke satu setapiVersionuntuk setiap jenis sumber daya. - Fungsi yang ditentukan pengguna saat ini tidak didukung. Fitur eksperimental saat ini dapat diakses. Untuk informasi selengkapnya, lihat Fungsi yang ditentukan pengguna di Bicep.
- Beberapa fitur Bicep memerlukan perubahan terkait pada bahasa perantara (templat JSON Azure Resource Manager). Tim produk mengumumkan fitur-fitur ini sebagaimana tersedia setelah semua pembaruan yang diperlukan disebarkan ke Azure global. Jika Anda menggunakan lingkungan yang berbeda seperti Azure Stack, mungkin ada keterlambatan dalam ketersediaan fitur. Fitur Bicep hanya tersedia setelah bahasa perantara juga diperbarui di lingkungan tersebut.
Format Bicep
Bicep adalah bahasa komputer deklaratif, yang berarti elemen dapat muncul dalam urutan mana pun. Tidak seperti bahasa komputer imperatif, urutan elemennya tidak memengaruhi cara penyebaran diproses.
File Bicep memiliki elemen berikut:
#<directive-name> <argument> [<argument> ...]
@<decorator>(<argument>)
metadata <metadata-name> = ANY
targetScope = '<scope>'
@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>
@<decorator>(<argument>)
var <variable-name> = <variable-value>
@<decorator>(<argument>)
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
<resource-properties>
}
@<decorator>(<argument>)
module <module-symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
@<decorator>(<argument>)
output <output-name> <output-data-type> = <output-value>
Contoh berikut menunjukkan implementasi elemen-elemen ini:
metadata description = 'Creates a storage account and a web app'
@description('The prefix to use for the storage account name.')
@minLength(3)
@maxLength(11)
param storagePrefix string
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Metadata
Metadata pada Bicep adalah nilai yang tidak bertipe yang dapat Anda sertakan dalam file Bicep Anda. Metadata menyediakan informasi tambahan tentang file Bicep Anda, seperti nama, deskripsi, penulis, dan tanggal pembuatan.
Cakupan target
Cakupan target bawaan adalah resourceGroup. Jika Anda menyebarkan di tingkat grup sumber daya, Anda tidak perlu mengatur cakupan target dalam file Bicep Anda.
Nilai yang diperbolehkan adalah:
-
resourceGroup: Nilai default yang digunakan untuk penyebaran grup sumber daya. -
subscription: Digunakan untuk penyebaran langganan. -
managementGroup: Digunakan untuk penyebaran grup manajemen. -
tenant: Digunakan untuk penyebaran penyewa.
Dalam modul, Anda dapat menentukan cakupan yang berbeda dari cakupan untuk sisa file Bicep. Untuk informasi selengkapnya, lihat Mengonfigurasi cakupan modul.
Parameter
Gunakan parameter untuk nilai yang perlu bervariasi untuk penyebaran yang berbeda. Anda dapat menentukan nilai default untuk parameter yang digunakan jika nilai tidak disediakan selama penyebaran.
Misalnya, Anda dapat menambahkan SKU parameter untuk menentukan ukuran yang berbeda untuk sumber daya. Anda mungkin memasukkan nilai yang berbeda tergantung pada apakah Anda melakukan penerapan untuk pengujian atau produksi.
param storageSKU string = 'Standard_LRS'
Parameter tersedia untuk digunakan dalam file Bicep Anda.
sku: {
name: storageSKU
}
Anda dapat menambahkan satu atau beberapa dekorator untuk setiap parameter. Untuk informasi selengkapnya, lihat Menggunakan dekorator.
Untuk informasi selengkapnya, lihat Parameter di Bicep.
Variabel
Untuk membuat file Bicep Anda lebih mudah dibaca, merangkum ekspresi kompleks dalam variabel. Misalnya, Anda dapat menambahkan variabel untuk nama sumber daya yang Anda buat dengan menggabungkan beberapa nilai bersama-sama.
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
Gunakan variabel ini di mana pun Anda memerlukan ekspresi kompleks.
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
Anda dapat menambahkan satu atau beberapa dekorator untuk setiap variabel. Untuk informasi selengkapnya, lihat Menggunakan dekorator.
Untuk mengetahui informasi selengkapnya, lihat Variabel dalam Bicep.
Sumber
Gunakan kata kunci resource untuk menentukan sumber daya untuk disebarkan. Deklarasi sumber daya Anda menyertakan nama simbolis untuk sumber daya. Gunakan nama simbolis ini di bagian lain file Bicep untuk mendapatkan nilai dari sumber daya.
Deklarasi sumber daya juga mencakup jenis sumber daya dan versi API. Dalam isi deklarasi sumber daya, sertakan properti yang khusus untuk jenis sumber dayanya.
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
Anda dapat menambahkan satu atau beberapa dekorator untuk setiap sumber daya. Untuk informasi selengkapnya, lihat Menggunakan dekorator.
Untuk informasi selengkapnya, lihat Deklarasi sumber daya dalam Bicep.
Beberapa sumber daya memiliki hubungan induk/anak. Anda bisa menetapkan sumber daya anak baik di dalam sumber daya induk maupun di luar sumber daya induk.
Contoh berikut memperlihatkan cara menetapkan sumber daya anak di dalam sumber daya induk. Ini berisi akun penyimpanan dengan sumber daya anak (layanan file) yang ditentukan dalam akun penyimpanan. Layanan file juga memiliki sumber daya anak (berbagi) yang ditentukan di dalamnya.
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
Contoh berikutnya memperlihatkan cara menetapkan sumber daya anak di luar sumber daya induk. Anda menggunakan properti induk untuk mengidentifikasi hubungan induk/anak. Tiga sumber daya yang sama ditetapkan.
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2025-06-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = {
name: 'exampleshare'
parent: service
}
Untuk informasi selengkapnya, lihat Mengatur nama dan jenis untuk sumber daya anak dalam Bicep.
Modul
Modul memungkinkan Anda untuk menggunakan kembali kode dari file Bicep dalam file Bicep lainnya. Dalam deklarasi modul, Anda menautkan ke file untuk digunakan kembali. Saat menyebarkan file Bicep, Anda juga menyebarkan sumber daya dalam modul.
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Dengan nama simbolis, Anda dapat mereferensikan modul dari tempat lain dalam file. Misalnya, Anda bisa mendapatkan nilai output dari modul dengan menggunakan nama simbolis dan nama nilai output.
Anda dapat menambahkan satu atau beberapa dekorator untuk setiap modul. Untuk informasi selengkapnya, lihat Menggunakan dekorator.
Untuk mengetahui informasi lebih lanjut, lihat Menggunakan modul Bicep.
Output
Gunakan keluaran untuk mengembalikan nilai dari penggelaran. Biasanya, Anda mengembalikan nilai dari sumber daya yang disebarkan saat Anda perlu menggunakan kembali nilai tersebut untuk operasi lain.
output storageEndpoint object = stg.properties.primaryEndpoints
Anda dapat menambahkan satu atau beberapa dekorator untuk setiap output. Untuk informasi selengkapnya, lihat Menggunakan dekorator.
Untuk mengetahui informasi selengkapnya, lihat Output dalam Bicep.
Jenis
type Gunakan pernyataan untuk menentukan jenis data yang ditentukan pengguna.
param location string = resourceGroup().location
type storageAccountSkuType = 'Standard_LRS' | 'Standard_GRS'
type storageAccountConfigType = {
name: string
sku: storageAccountSkuType
}
param storageAccountConfig storageAccountConfigType = {
name: 'storage${uniqueString(resourceGroup().id)}'
sku: 'Standard_LRS'
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
Anda dapat menambahkan satu atau beberapa dekorator untuk setiap jenis data yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Menggunakan dekorator.
Untuk informasi selengkapnya, lihat Jenis data yang ditentukan pengguna di Bicep.
Functions
Dalam file Bicep, Anda dapat membuat fungsi Anda sendiri dan juga menggunakan fungsi Bicep standar yang secara otomatis tersedia dalam file Bicep Anda. Buat fungsi Anda sendiri saat Anda memiliki ekspresi rumit yang Anda gunakan berulang kali dalam file Bicep Anda.
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
Untuk informasi selengkapnya, lihat Fungsi yang ditentukan pengguna di Bicep.
Dekorator
Tambahkan satu atau beberapa dekorator ke setiap elemen berikut:
Tabel berikut mencantumkan dekorator:
| Dekorator | Terapkan ke elemen | Terapkan ke tipe data | Argumen | Deskripsi |
|---|---|---|---|---|
| diizinkan | param | semua | array | Gunakan dekorator ini untuk memastikan pengguna memberikan nilai yang benar. Dekorator ini hanya diizinkan pada param pernyataan. Untuk menyatakan bahwa properti harus merupakan salah satu dari sekumpulan nilai yang telah ditentukan sebelumnya dalam pernyataan type atau output , gunakan sintaks jenis union. Anda juga dapat menggunakan sintaks jenis union dalam param pernyataan. |
| batchSize | modul, sumber daya | Tidak Tersedia | bilangan bulat | Siapkan instance untuk disebarkan secara bertahap. |
| deskripsi | func, param, modul, output, sumber daya, jenis, var | semua | string | Berikan deskripsi untuk elemen. Gunakan teks berformat Markdown untuk teks deskripsi. |
| diskriminator | param, jenis, output | objek | string | Gunakan dekorator ini untuk memastikan bahwa subkelas yang benar diidentifikasi dan dikelola. Untuk informasi selengkapnya, lihat Jenis data union bertanda kustom. |
| ekspor | func, type, var | semua | tidak ada | Menunjukkan bahwa file Bicep lain dapat mengimpor elemen . |
| panjangMaksimal | param, output, tipe | larik, teks | int | Panjang maksimum untuk elemen string dan array. Nilainya inklusif. |
| nilai maksimum | param, output, tipe | int | int | Nilai maksimum untuk elemen bilangan bulat. Nilai ini inklusif. |
| metadata | func, output, param, type | semua | objek | Properti kustom untuk diterapkan pada elemen. Dapat menyertakan properti deskripsi yang setara dengan dekorator deskripsi. |
| PanjangMinimal | param, output, tipe | larik, teks | int | Panjang minimum untuk elemen string dan array. Nilainya inklusif. |
| nilai minimum | param, output, tipe | int | int | Nilai minimum untuk elemen bilangan bulat. Nilai ini inklusif. |
| disegel | param, jenis, output | objek | tidak ada | Tingkatkan BCP089 dari peringatan ke kesalahan ketika nama properti dari jenis data yang ditentukan pengguna kemungkinan salah ketik. Untuk informasi selengkapnya, lihat Meningkatkan tingkat kesalahan. |
| aman | param, ketik | string, objek | tidak ada | Menandai parameter sebagai aman. Nilai parameter aman tidak disimpan ke riwayat penyebaran dan tidak dicatat ke dalam log. Untuk informasi lebih lanjut, lihat Untai (karakter) dan objek yang aman. |
Petunjuk
Bicep mendukung arahan (pragmas) untuk mengontrol perilaku tertentu dalam file, seperti menekan peringatan linter atau pesan diagnostik peringatan. Arahan diawali dengan # karakter.
#<directive-name> <argument1> [<argument2> ... ]
Anda harus menentukan setidaknya satu pengidentifikasi setelah direktif. Jika Anda tidak memberikan pengidentifikasi apa pun, pengkompilasi melaporkan kesalahan. Pengidentifikasi yang Anda tentukan setelah instruksi dapat merujuk pada:
-
Diagnostik kompilator Bicep, seperti
BCP138 -
Aturan linter Bicep, seperti
no-unused-params
Anda memisahkan argumen dengan menggunakan spasi. Aturan linter dan kode diagnostik sensitif terhadap huruf besar/kecil.
Bicep saat ini mendukung tiga jenis arahan:
-
#disable-next-line— menonaktifkan satu atau beberapa diagnostik untuk baris berikutnya saja -
#disable-diagnostics— menonaktifkan satu atau beberapa diagnostik untuk seluruh file atau hingga diaktifkan kembali -
#restore-diagnostics— mengaktifkan kembali diagnostik yang dinonaktifkan sebelumnya
Contoh berikut mengabaikan beberapa diagnostik dan aturan:
#disable-diagnostics no-unused-vars BCP335
var location = 'eastus'
param storageCount int
resource accounts 'Microsoft.Storage/storageAccounts@2025-06-01' = [for i in range(0, storageCount): if (i % 2 == 0) {
name: 'sa0820${i}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
Gunakan direktif dengan hemat dan hanya ketika Anda meninjau dan dengan sengaja mematikan aturan diagnostik atau linter. Penggunaan yang berlebihan dapat mengurangi keterbacaan dan pemeliharaan templat. Tambahkan komentar yang menjelaskan mengapa aturan atau kode diagnostik tidak berlaku untuk baris ini.
Perulangan
Tambahkan perulangan berulang ke file Bicep Anda untuk menentukan beberapa salinan:
- Sumber daya
- Modul
- Variabel
- Properti
- Sebuah Output
Gunakan ekspresi for untuk menentukan perulangan.
param moduleCount int = 2
module stgModule './example.bicep' = [for i in range(0, moduleCount): {
name: '${i}deployModule'
params: {
}
}]
Anda dapat mengiterasi elemen dalam array, objek, atau indeks integer.
Untuk informasi selengkapnya, lihat loop iteratif dalam Bicep.
Penyebaran kondisional
Anda dapat menambahkan sumber daya atau modul ke file Bicep anda untuk penyebaran bersyarkat. Selama penyebaran, kondisi dievaluasi dan hasilnya menentukan apakah sumber daya atau modul disebarkan. Gunakan ekspresi if untuk menentukan penyebaran kondisional.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Untuk informasi selengkapnya, lihat Penyebaran bersyarkat di Bicep dengan ekspresi if.
Ruang kosong
File Bicep mengabaikan spasi dan tab.
Bicep sensitif terhadap baris baru. Contohnya:
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' = if (newOrExisting == 'new') {
...
}
Anda tidak dapat menulisnya sebagai:
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' =
if (newOrExisting == 'new') {
...
}
Anda dapat menentukan objek dan array di beberapa baris.
Komentar
Gunakan // untuk komentar baris tunggal atau /* ... */ untuk komentar multibaris.
Contoh berikut memperlihatkan komentar satu baris.
// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2025-01-01' = {
...
}
Contoh berikut menunjukkan komentar multibaris.
/*
This Bicep file assumes the key vault already exists and
is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string
Deklarasi beberapa baris
Anda sekarang dapat menggunakan beberapa baris dalam deklarasi fungsi, array, dan objek. Fitur ini memerlukan Bicep CLI versi 0.7.X atau yang lebih tinggi.
Dalam contoh berikut, definisi resourceGroup() dipecah menjadi beberapa baris.
var foo = resourceGroup(
mySubscription,
myRgName)
Untuk sampel deklarasi beberapa baris, lihat array dan objek.
Konten terkait
- Untuk pengantar Bicep, lihat Apa itu Bicep?
- Untuk mengetahui jenis data Bicep, lihat Jenis data.