Podmíněné nasazení v Bicep

Někdy potřebujete volitelně nasadit prostředek nebo modul v Nástroji Bicep. Pomocí klíčového if slova určete, jestli se prostředek nebo modul nasadí. Hodnota podmínky se přeloží na true nebo false. Pokud je hodnota true, prostředek se vytvoří. Pokud je hodnota false, prostředek se nevytvořil. Hodnotu lze použít pouze pro celý prostředek nebo modul.

Poznámka

Podmíněné nasazení neprovádí kaskádovitě na podřízené prostředky. Pokud chcete podmíněně nasadit prostředek a jeho podřízené prostředky, musíte použít stejnou podmínku pro každý typ prostředku.

Školicí materiály

Pokud byste se raději o podmínkách dozvěděli prostřednictvím podrobných pokynů, přečtěte si téma Vytváření flexibilních šablon Bicep pomocí podmínek a smyček.

Podmínka nasazení

Můžete předat hodnotu parametru, která označuje, jestli je prostředek nasazený. Následující příklad podmíněně nasadí zónu DNS.

param deployZone bool

resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = if (deployZone) {
  name: 'myZone'
  location: 'global'
}

Další příklad podmíněně nasadí modul.

param deployZone bool

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

Podmínky lze použít s deklaracemi závislostí. V případě explicitních závislostí 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 dojít k chybě nasazení.

Nový nebo existující prostředek

Podmíněné nasazení můžete použít k vytvoření nového prostředku nebo k použití existujícího prostředku. 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 sa 'Microsoft.Storage/storageAccounts@2019-06-01' = if (newOrExisting == 'new') {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Když je parametr newOrExisting nastaven na nový, podmínka se vyhodnotí jako true. Účet úložiště se nasadí. Pokud newOrExisting je ale podmínka nastavená na existující, vyhodnotí se jako false (false) a účet úložiště se nenasadí.

Funkce modulu runtime

Pokud použijete odkaz nebo funkci seznamu s podmíněně nasazeným prostředkem, funkce se vyhodnotí i v případě, že prostředek není nasazený. Pokud funkce odkazuje na prostředek, který neexistuje, zobrazí se chyba.

Pomocí operátoru podmíněného výrazu ?: se ujistěte, že se funkce vyhodnocuje jenom pro podmínky 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@2017-03-30' = 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, '2015-11-01-preview').customerId : null)
    }
    protectedSettings: {
      workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2015-11-01-preview').primarySharedKey : null)
    }
  }
}

output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')

Další kroky