Podmíněné nasazení prostředků

Dokončeno

Podmínky v kódu Bicep můžete použít k nasazení prostředků pouze v případech, kdy jsou splněna konkrétní omezení.

Například ve vaší společnosti toy potřebujete nasadit prostředky do různých prostředí. Když je nasadíte do produkčního prostředí, musíte zajistit, aby pro logické servery Azure SQL bylo povolené auditování. Když ale nasadíte prostředky do vývojových prostředí, nechcete povolit auditování. K nasazení prostředků do všech prostředí chcete použít jednu šablonu.

V této lekci se dozvíte, jak nasadit prostředky podmíněně.

Použití základních podmínek

Když nasadíte prostředek v Bicep, můžete zadat if klíčové slovo následované podmínkou. Podmínka by se měla přeložit na logickou hodnotu (true nebo false). Pokud je hodnota true, prostředek se nasadí. Pokud je hodnota false, prostředek se nenasadí.

Je běžné vytvářet podmínky na základě hodnot parametrů, které zadáte. Například následující kód nasadí účet úložiště pouze v případě, že deployStorageAccount je parametr nastavený na true:

param deployStorageAccount bool

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = if (deployStorageAccount) {
  name: 'teddybearstorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  // ...
}

Všimněte si, že if klíčové slovo je na stejném řádku jako definice prostředku.

Použití výrazů jako podmínek

Předchozí příklad byl zcela základní. Parametr deployStorageAccount byl typu bool, takže je jasné, zda má hodnotu true nebo false.

V Bicep můžou podmínky obsahovat také výrazy. V následujícím příkladu kód nasadí prostředek auditování SQL pouze v případě, že je hodnota parametru environmentName rovna Production:

@allowed([
  'Development'
  'Production'
])
param environmentName string

resource auditingSettings 'Microsoft.Sql/servers/auditingSettings@2021-11-01-preview' = if (environmentName == 'Production') {
  parent: server
  name: 'default'
  properties: {
  }
}

Obvykle je vhodné vytvořit proměnnou pro výraz, který používáte jako podmínku. Díky tomu je vaše šablona srozumitelnější a čitelnější. Tady je příklad:

@allowed([
  'Development'
  'Production'
])
param environmentName string

var auditingEnabled = environmentName == 'Production'

resource auditingSettings 'Microsoft.Sql/servers/auditingSettings@2021-11-01-preview' = if (auditingEnabled) {
  parent: server
  name: 'default'
  properties: {
  }
}

Závisí na podmíněně nasazených prostředcích.

Při podmíněném nasazování prostředků je někdy potřeba vědět, jak Bicep vyhodnotí závislosti mezi nimi.

Pojďme pokračovat v psaní kódu Bicep pro nasazení nastavení auditování SQL. Soubor Bicep také musí deklarovat prostředek účtu úložiště, jak je znázorněno tady:

@allowed([
  'Development'
  'Production'
])
param environmentName string
param location string = resourceGroup().location
param auditStorageAccountName string = 'bearaudit${uniqueString(resourceGroup().id)}'

var auditingEnabled = environmentName == 'Production'
var storageAccountSkuName = 'Standard_LRS'

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
}

resource auditingSettings 'Microsoft.Sql/servers/auditingSettings@2021-11-01-preview' = if (auditingEnabled) {
  parent: server
  name: 'default'
  properties: {
  }
}

Všimněte si, že účet úložiště má také podmínku. To znamená, že se nenasadí ani pro neprodukční prostředí. Prostředek nastavení auditování SQL teď může odkazovat na podrobnosti účtu úložiště:

resource auditingSettings 'Microsoft.Sql/servers/auditingSettings@2021-11-01-preview' = if (auditingEnabled) {
  parent: server
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

Všimněte si, že tento kód Bicep používá operátor otazníku (?) v rámci storageEndpoint a storageAccountAccessKey vlastností. Při nasazení kódu Bicep do produkčního prostředí se výrazy vyhodnotí na podrobnosti z účtu úložiště. Při nasazení kódu do neprodukčního prostředí se výrazy vyhodnotí jako prázdný řetězec ('').

Možná vás zajímá, proč je tento kód nezbytný, protože auditingSettings a auditStorageAccount oba mají stejnou podmínku, a proto nebudete nikdy muset nasadit prostředek nastavení auditování SQL bez účtu úložiště. I když je to pravda, Azure Resource Manager vyhodnotí výrazy vlastností před podmíněným použitím prostředků. To znamená, že pokud kód Bicep tento výraz nemá, nasazení selže s chybou ResourceNotFound .

Poznámka:

Ve stejném souboru Bicep nemůžete definovat dva prostředky se stejným názvem a podmíněně nasadit jenom jeden z nich. Nasazení selže, protože Resource Manager to zobrazí jako konflikt.

Pokud máte několik prostředků, zvažte použití modulů Bicep se stejnou podmínkou pro nasazení. Můžete vytvořit modul, který nasadí všechny prostředky, a pak do hlavního souboru Bicep umístí podmínku na deklaraci modulu.