Penyebaran berskala di Bicep dengan ekspresi if
Untuk menyebarkan sumber daya atau modul secara opsional di Bicep, gunakan if
ekspresi . Ekspresi if
menyertakan kondisi yang diselesaikan ke true atau false. if
Ketika kondisinya benar, sumber daya disebarkan. Saat bernilai false, sumber daya tidak dibuat. Nilai hanya dapat diterapkan ke seluruh sumber daya atau modul.
Catatan
Penyebaran kondisional tidak melakukan kaskade ke sumber daya turunan. Jika Anda ingin meyebarkan sumber daya dan turunannya secara kondisional, Anda harus menerapkan kondisi yang sama untuk setiap jenis sumber daya.
Sumber daya pelatihan
Jika Anda ingin mempelajari kondisi melalui panduan langkah demi langkah, lihat Membangun template Bicep yang fleksibel dengan menggunakan kondisi dan perulangan.
Menentukan kondisi untuk penyebaran
Di Bicep, Anda dapat menyebarkan sumber daya secara kondisional dengan meneruskan parameter yang menentukan apakah sumber daya disebarkan. Anda menguji kondisi dengan if
ekspresi dalam deklarasi sumber daya. Contoh berikut menunjukkan sintaks untuk if
ekspresi dalam file Bicep. Ini secara kondisional menyebarkan zona DNS. Kapan deployZone
, true
ia menyebarkan zona DNS. Kapan deployZone
, false
ia melompati penyebaran zona DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Contoh berikutnya secara kondisional menyebarkan modul.
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Kondisi dapat digunakan dengan deklarasi dependensi. Untuk dependensi eksplisit, Azure Resource Manager secara otomatis menghapusnya dari dependensi yang diperlukan ketika sumber daya tidak disebarkan. Untuk dependensi implisit, merujuk properti sumber daya kondisional diizinkan tetapi dapat menghasilkan kesalahan penyebaran.
Sumber daya baru atau yang sudah ada
Anda dapat menggunakan penyebaran kondisional untuk membuat sumber daya baru atau menggunakan sumber daya yang sudah ada. Contoh berikut menunjukkan cara menyebarkan akun penyimpanan baru atau menggunakan akun penyimpanan yang sudah ada.
param storageAccountName string
param location string = resourceGroup().location
@allowed([
'new'
'existing'
])
param newOrExisting string = 'new'
resource saNew 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource saExisting 'Microsoft.Storage/storageAccounts@2023-04-01' existing = if (newOrExisting == 'existing') {
name: storageAccountName
}
output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)
Ketika parameter newOrExisting
diatur ke baru, kondisi bernilai benar. Akun penyimpanan disebarkan. Jika tidak, akun penyimpanan yang ada digunakan.
Peringatan
Jika Anda mereferensikan sumber daya yang disebarkan secara kondisional yang tidak disebarkan. Anda akan mendapatkan kesalahan yang mengatakan sumber daya tidak ditentukan dalam templat.
Fungsi runtime
Jika Anda menggunakan fungsi referensi atau daftar dengan sumber daya yang diterapkan secara bersyarat, fungsi tersebut dievaluasi meskipun sumber daya tidak diterapkan. Anda mendapatkan kesalahan jika fungsi merujuk ke sumber daya yang tidak ada.
Gunakan operator ungkapan bersyarat ?: untuk memastikan fungsi hanya dievaluasi untuk kondisi saat sumber daya sedang disebarkan. Contoh templat berikut menunjukkan cara menggunakan fungsi ini dengan ekspresi yang hanya valid secara kondisional.
param vmName string
param location string
param logAnalytics string = ''
resource vmName_omsOnboarding 'Microsoft.Compute/virtualMachines/extensions@2024-03-01' = if (!empty(logAnalytics)) {
name: '${vmName}/omsOnboarding'
location: location
properties: {
publisher: 'Microsoft.EnterpriseCloud.Monitoring'
type: 'MicrosoftMonitoringAgent'
typeHandlerVersion: '1.0'
autoUpgradeMinorVersion: true
settings: {
workspaceId: ((!empty(logAnalytics)) ? reference(logAnalytics, '2022-10-01').customerId : null)
}
protectedSettings: {
workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2022-10-01').primarySharedKey : null)
}
}
}
output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')
Langkah berikutnya
- Tinjau modul Microsoft Learn Membangun template Bicep yang fleksibel menggunakan kondisi dan perulangan.
- Untuk rekomendasi tentang membuat file Bicep, lihat Praktik terbaik untuk Bicep.
- Untuk membuat beberapa instans sumber daya, lihat Perulangan iteratif di Bicep.