Sdílet prostřednictvím


Podmínková nasazení v Bicepu s použitím výrazů if

Pokud chcete volitelně nasadit prostředek nebo modul v Bicep, použijte výraz if . Výraz if obsahuje podmínku, která se překládá na true nebo false. if Pokud je podmínka pravdivá, prostředek se nasadí. Pokud je hodnota false, prostředek se nevytvoří. Hodnotu můžete použít pouze pro celý prostředek nebo modul.

Varování

Podmíněné nasazení se nekaskáduje na podřízené prostředky. Pokud chcete podmíněně nasadit prostředek a jeho podřízené prostředky, musíte u každého typu prostředku použít stejnou podmínku.

Diagnostický kód Bicep BCP318 nastane, když se pokusíte získat přístup k vlastnosti podmíněného prostředku, který může mít hodnotu null, pokud prostředek není nasazený. Chcete-li potlačit upozornění nebo zabránit výjimce modulu runtime, použijte operátor null-forgiving nebo operátor safe-dereference. Další informace najdete v tématu BCP318.

Definování podmínky pro nasazení

V Bicep můžete podmíněně nasadit prostředek předáním parametru, který určuje, jestli je prostředek nasazený. Otestujte podmínku pomocí if výrazu v deklaraci prostředku. Následující příklad ukazuje syntaxi výrazu if v souboru Bicep. Podmíněně nasadí zónu DNS (Domain Name System). Když deployZone je true, nasadí zónu DNS. Pokud je deployZonefalse, přeskočí se nasazení zóny DNS.

param deployZone bool

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

Následující příklad podmíněně nasadí modul:

param deployZone bool

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

Můžete použít podmínky s deklaracemi závislostí. U explicitních závislostí je Azure Resource Manager automaticky odebere z požadovaných závislostí, když prostředek není nasazený. U implicitních závislostí je odkazování na vlastnost podmíněného prostředku povolené, ale může způsobit chybu nasazení.

Nový nebo existující prostředek

Pomocí podmíněného nasazení můžete vytvořit nový prostředek nebo použít existující. Následující příklad ukazuje, jak nasadit nový účet úložiště nebo použít existující účet úložiště.

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)

Pokud je parametr newOrExisting nastaven na nový, podmínka se vyhodnotí jako true. Účet úložiště je nasazen. V opačném případě se použije existující účet úložiště.

Varování

Pokud odkazujete na podmíněně nasazený prostředek, ale prostředek není nasazený, zobrazí se chyba. Chybová zpráva uvádí, že prostředek není v šabloně definován.

Funkce modulu runtime

Pokud použijete odkaz nebo funkci seznamu s prostředkem, který zadáte pro podmíněné nasazení, funkce se vyhodnotí. Pokud prostředek není nasazený, zobrazí se chyba.

Použijte podmíněný výraz ?: operátor k zajištění, aby funkce byla vyhodnocena pouze za podmínek při nasazení prostředku. Následující příklad šablony ukazuje, jak používat tuto funkci s výrazy, které jsou pouze podmíněně platné.

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')

Další kroky