Bicep'te if ifadesiyle koşullu dağıtımlar
İsteğe bağlı olarak Bicep'te bir kaynak veya modül dağıtmak için ifadesini if
kullanın. İfade if
, true veya false olarak çözümleyen bir koşul içerir. if
Koşul true olduğunda kaynak dağıtılır. Değer false olduğunda kaynak oluşturulmaz. Değer yalnızca kaynağın veya modülün tamamına uygulanabilir.
Dekont
Koşullu dağıtım alt kaynaklara art arda gelmez. Bir kaynağı ve alt kaynaklarını koşullu olarak dağıtmak istiyorsanız, her kaynak türüne aynı koşulu uygulamanız gerekir.
Eğitim kaynakları
Adım adım yönergeler aracılığıyla koşullar hakkında bilgi edinmek isterseniz bkz . Koşulları ve döngüleri kullanarak esnek Bicep şablonları oluşturma.
Dağıtım koşulunu tanımlama
Bicep'te, kaynağın dağıtılıp dağıtılmadığını belirten bir parametre geçirerek bir kaynağı koşullu olarak dağıtabilirsiniz. Koşulu kaynak bildiriminde bir if
ifadeyle test edebilirsiniz. Aşağıdaki örnekte, Bicep dosyasındaki bir if
ifadenin söz dizimi gösterilmektedir. Bir DNS bölgesini koşullu olarak dağıtır. olduğunda deployZone
true
, DNS bölgesini dağıtır. olduğunda deployZone
false
, DNS bölgesini dağıtmayı atlar.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Sonraki örnek, bir modülü koşullu olarak dağıtır.
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Koşullar bağımlılık bildirimleriyle kullanılabilir. Açık bağımlılıklar için Azure Resource Manager, kaynak dağıtılmadığında gerekli bağımlılıklardan otomatik olarak kaldırır. Örtük bağımlılıklar için, koşullu kaynağın özelliğine başvurmaya izin verilir, ancak dağıtım hatasına neden olabilir.
Yeni veya mevcut kaynak
Koşullu dağıtımı kullanarak yeni bir kaynak oluşturabilir veya var olan bir kaynağı kullanabilirsiniz. Aşağıdaki örnekte yeni bir depolama hesabının nasıl dağıtılacağı veya mevcut bir depolama hesabının nasıl kullanılacağı gösterilmektedir.
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)
Parametresi newOrExisting
yeni olarak ayarlandığında koşul true olarak değerlendirilir. Depolama hesabı dağıtılır. Aksi takdirde mevcut depolama hesabı kullanılır.
Uyarı
Dağıtılmayan koşullu olarak dağıtılan bir kaynağa başvurursanız. Kaynağın şablonda tanımlanmadığını belirten bir hata alırsınız.
Çalışma zamanı işlevleri
Koşullu olarak dağıtılan bir kaynakla bir başvuru veya liste işlevi kullanırsanız, kaynak dağıtılmasa bile işlev değerlendirilir. İşlev var olmayan bir kaynağa başvuruyorsa bir hata alırsınız.
İşlevin yalnızca kaynak dağıtıldığında koşullar için değerlendirildiğinden emin olmak için ?: koşullu ifadesini kullanın. Aşağıdaki örnek şablonda bu işlevin yalnızca koşullu olarak geçerli ifadelerle nasıl kullanılacağı gösterilmektedir.
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')
Sonraki adımlar
- Koşulları ve döngüleri kullanarak esnek Bicep şablonları oluşturma Learn modülünü gözden geçirin.
- Bicep dosyaları oluşturma hakkında öneriler için bkz . Bicep için en iyi yöntemler.
- Bir kaynağın birden çok örneğini oluşturmak için bkz . Bicep'te yinelemeli döngüler.