Aracılığıyla paylaş


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ğeri yalnızca kaynağın veya modülün tamamına uygulayabilirsiniz.

Uyarı

Koşullu dağıtım alt kaynaklara otomatik olarak uygulanmaz. Bir kaynağı ve alt kaynaklarını koşullu olarak dağıtmak istiyorsanız, her kaynak türüne aynı koşulu uygulamanız gerekir.

Bicep tanılama kodu BCP318 , kaynak dağıtılmadığında null olabilecek koşullu bir kaynak üzerindeki bir özelliğe erişmeye çalıştığınızda oluşur. Uyarıyı engellemek veya çalışma zamanı özel durumunu önlemek için null-forgiving işlecini veya güvenli başvuru işlecini kullanın. Daha fazla bilgi için bkz. BCP318.

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 bildirimindeki bir if ifadeyle test edin. Aşağıdaki örnekte, Bicep dosyasındaki bir if ifadenin söz dizimi gösterilmektedir. Koşullu olarak bir Alan Adı Sistemi (DNS) bölgesi dağıtır. deployZone true olduğunda, DNS bölgesini dağıtır. Ne zaman deployZonefalse olur, DNS bölgesini dağıtmayı atlar.

param deployZone bool

resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
  name: 'myZone'
  location: 'global'
}

Aşağıdaki örnek, bir modülü koşullu olarak dağıtır:

param deployZone bool

module dnsZone 'dnszones.bicep' = if (deployZone) {
  name: 'myZoneModule'
}

Bağımlılık bildirimleriyle koşulları kullanabilirsiniz. Açık bağımlılıklar için Azure Resource Manager, kaynak dağıtılmadığında bunları 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@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)

Parametresi newOrExisting yeni olarak ayarlandığında koşul true olarak değerlendirilir. Depolama hesabı dağıtıldı. Aksi takdirde, mevcut depolama hesabı kullanılır.

Uyarı

Koşullu olarak dağıtılan bir kaynağa başvurursanız ancak kaynak dağıtılmazsa bir hata alırsınız. Hata iletisi, kaynağın şablonda tanımlanmadığını belirtir.

Çalışma zamanı fonksiyonları

Koşullu dağıtım için belirttiğiniz bir kaynakla bir başvuru veya liste işlevi kullanırsanız işlev değerlendirilir. Kaynak dağıtılmadıysa 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 ?: işleci 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@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')

Sonraki adımlar

  • Bicep dosyaları oluşturma hakkında öneriler için bkz. Bicep için en iyi uygulamalar.
  • Bir kaynağın birden çok örneğini oluşturmak için Bicep'teki yinelemeli döngüler'e bkz.