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 membandingkan sintaks Bicep dengan sintaks JSON untuk templat Azure Resource Manager (templat ARM). Dalam kebanyakan kasus, Bicep menyediakan sintaksis yang kurang verbose daripada yang setara dalam JSON.
Jika Anda terbiasa menggunakan JSON untuk mengembangkan templat ARM, gunakan contoh berikut untuk mempelajari sintaks yang setara untuk Bicep.
Membandingkan file lengkap
Bicep Playground memungkinkan Anda melihat Bicep dan JSON yang setara secara berdampingan. Anda dapat membandingkan implementasi infrastruktur yang sama.
Misalnya, Anda dapat melihat file untuk menyebarkan server dan database SQL. Bicep ini sekitar setengah ukuran templat ARM.
Ekspresi
Untuk menulis ekspresi:
func()
"[func()]"
Parameter-parameternya
Untuk mendeklarasikan parameter dengan nilai default:
param orgName string = 'Contoso'
"parameters": {
"orgName": {
"type": "string",
"defaultValue": "Contoso"
}
}
Untuk mendapatkan nilai parameter, gunakan nama yang Anda tentukan:
name: orgName
"name": "[parameters('orgName')]"
Variabel
Untuk mendeklarasikan variabel:
var description = 'example value'
"variables": {
"description": "example value"
}
Untuk mendapatkan nilai variabel, gunakan nama yang Anda tentukan:
workloadSetting: description
"workloadSetting": "[variables('description')]"
String
Untuk menggabungkan string:
name: '${namePrefix}-vm'
"name": "[concat(parameters('namePrefix'), '-vm')]"
Operator logis
Untuk mengembalikan LOGIKA DAN:
isMonday && isNovember
[and(parameter('isMonday'), parameter('isNovember'))]
Untuk menetapkan nilai secara kondisional:
isMonday ? 'valueIfTrue' : 'valueIfFalse'
[if(parameters('isMonday'), 'valueIfTrue', 'valueIfFalse')]
Cakupan penyebaran
Untuk mengatur cakupan target penyebaran:
targetScope = 'subscription'
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#"
Sumber Daya
Untuk mendeklarasikan sumber daya:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2024-03-01' = {
...
}
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
Untuk menyebarkan sumber daya secara kondisional:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2024-03-01' = if(deployVM) {
...
}
"resources": [
{
"condition": "[parameters('deployVM')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
Untuk mengatur properti sumber daya:
sku: '2016-Datacenter'
"sku": "2016-Datacenter",
Untuk mendapatkan ID sumber daya dalam templat:
nic1.id
[resourceId('Microsoft.Network/networkInterfaces', variables('nic1Name'))]
Perulangan
Untuk melakukan iterasi atas item dalam array atau hitungan:
[for storageName in storageAccountNames: {
...
}]
"copy": {
"name": "storagecopy",
"count": "[length(parameters('storageAccountNames'))]"
},
...
Dependensi sumber daya
Untuk Bicep, Anda dapat mengatur dependensi eksplisit tetapi pendekatan ini tidak disarankan. Sebaliknya, andalkan dependensi implisit. Dependensi implisit dibuat ketika satu deklarasi sumber daya mereferensikan pengidentifikasi sumber daya lain.
Berikut ini menunjukkan antarmuka jaringan dengan dependensi implisit pada kelompok keamanan jaringan. Ini mereferensikan kelompok keamanan jaringan dengan netSecurityGroup.id
.
resource netSecurityGroup 'Microsoft.Network/networkSecurityGroups@2024-05-01' = {
...
}
resource nic1 'Microsoft.Network/networkInterfaces@2024-05-01' = {
name: nic1Name
location: location
properties: {
...
networkSecurityGroup: {
id: netSecurityGroup.id
}
}
}
Jika Anda harus mengatur dependensi eksplisit, gunakan:
dependsOn: [ storageAccount ]
"dependsOn": ["[resourceId('Microsoft.Storage/storageAccounts', 'parameters('storageAccountName'))]"]
Sumber daya referensi
Untuk mendapatkan properti dari sumber daya dalam templat:
storageAccount.properties.primaryEndpoints.blob
[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))).primaryEndpoints.blob]
Untuk mendapatkan properti dari sumber daya yang sudah ada yang tidak diimplementasikan di dalam templat tersebut.
resource storageAccount 'Microsoft.Storage/storageAccounts@2024-01-01' existing = {
name: storageAccountName
}
// use later in template as often as needed
storageAccount.properties.primaryEndpoints.blob
// required every time the property is needed
"[reference(resourceId('Microsoft.Storage/storageAccounts/', parameters('storageAccountName')), '2019-06-01').primaryEndpoints.blob]"
Di Bicep, gunakan aksesor tertanam (::
) untuk mendapatkan properti pada sumber daya yang tertanam dalam sumber daya induk.
VNet1::Subnet1.properties.addressPrefix
Untuk JSON, gunakan fungsi referensi:
[reference(resourceId('Microsoft.Network/virtualNetworks/subnets', variables('subnetName'))).properties.addressPrefix]
Output
Untuk menghasilkan properti dari sumber daya dalam templat:
output hostname string = publicIP.properties.dnsSettings.fqdn
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Untuk menghasilkan nilai secara kondisional:
output hostname string = condition ? publicIP.properties.dnsSettings.fqdn : ''
"outputs": {
"hostname": {
"condition": "[variables('condition')]",
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
}
}
Operator ternary-Bicep setara dengan fungsi if dalam templat ARM JSON, bukan properti kondisinya. Sintaks terner harus mengevaluasi menjadi satu nilai atau nilai lainnya. Jika kondisi salah dalam sampel sebelumnya, Bicep menghasilkan nama host dengan string kosong, tetapi JSON tidak menghasilkan nilai.
Penggunaan kembali kode
Untuk memisahkan solusi ke dalam beberapa file:
- Untuk Bicep, gunakan modul.
- Untuk templat ARM, gunakan templat tertaut.
Langkah selanjutnya
- Untuk informasi tentang Bicep, lihat Panduan Memulai Bicep.
- Untuk mempelajari tentang mengonversi templat antar bahasa, lihat Mengonversi templat ARM antara JSON dan Bicep.