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.
Untuk menyebarkan sumber daya atau modul secara opsional di Bicep, gunakan if ekspresi . Ekspresi if mencakup kondisi yang bernilai true atau false. Ketika kondisi if benar, sumber daya disebarkan. Ketika nilainya salah, sumber daya tidak dibuat. Anda hanya dapat menerapkan nilai ke seluruh sumber daya atau modul.
Peringatan
Penyebaran bersyarat tidak diterapkan ke sumber daya anak. Jika Anda ingin menyebarkan sumber daya utama dan sumber daya anak secara kondisional, Anda harus menerapkan kondisi yang sama pada setiap jenis sumber daya.
Kode diagnostik Bicep BCP318 terjadi ketika Anda mencoba mengakses properti pada sumber daya bersyarat yang mungkin null jika sumber daya tidak disebarkan. Untuk menekan peringatan atau mencegah pengecualian runtime, gunakan operator pengampunan null atau operator dereferensi aman. Untuk informasi selengkapnya, lihat BCP318.
Menentukan kondisi untuk penyebaran
Di Bicep, Anda dapat menyebarkan sumber daya secara kondisional dengan meneruskan parameter yang menentukan apakah sumber daya disebarkan. Uji kondisi dengan ekspresi if dalam deklarasi sumber daya. Contoh berikut menunjukkan sintaks untuk if ekspresi dalam file Bicep. Ini secara kondisional menyebarkan zona Sistem Nama Domain (DNS). Ketika deployZone adalah true, itu mengimplementasikan zona DNS. Ketika deployZone adalah false, ia melewatkan penyebaran zona DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Contoh berikut secara kondisional menyebarkan modul:
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Anda dapat menggunakan kondisi dengan deklarasi dependensi. Untuk dependensi eksplisit, Azure Resource Manager secara otomatis menghapusnya dari dependensi yang diperlukan saat sumber daya tidak disebarkan. Untuk dependensi implisit, merujuk properti sumber daya kondisional diizinkan tetapi mungkin 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@2025-06-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource saExisting 'Microsoft.Storage/storageAccounts@2025-06-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 telah diterapkan. Jika tidak, akun penyimpanan yang ada digunakan.
Peringatan
Jika Anda mereferensikan sumber daya yang disebarkan secara kondisional tetapi sumber daya tidak disebarkan, Anda mendapatkan kesalahan. Pesan kesalahan menyatakan bahwa sumber daya tidak ditentukan dalam templat.
Fungsi runtime
Jika Anda menggunakan fungsi referensi atau daftar dengan sumber daya yang Anda tentukan untuk penyebaran bersyarkat, fungsi akan dievaluasi. Jika sumber daya tidak disebarkan, Anda mendapatkan kesalahan.
Gunakan operator ekspresi bersyarat ?: untuk memastikan bahwa fungsi hanya dievaluasi untuk kondisi saat sumber daya 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@2025-04-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
- Untuk rekomendasi tentang membuat file Bicep, lihat Praktik terbaik untuk Bicep.
- Untuk membuat beberapa instans sumber daya, lihat Perulangan iteratif di Bicep.