Erőforrások feltételes üzembe helyezése

Befejeződött

A Bicep-kódban lévő feltételekkel csak adott korlátozások esetén helyezhet üzembe erőforrásokat.

A toy cégnél például erőforrásokat kell üzembe helyeznie különböző környezetekben. Amikor éles környezetben helyezi üzembe őket, győződjön meg arról, hogy a naplózás engedélyezve van az Azure SQL logikai kiszolgálói számára. Ha azonban erőforrásokat helyez üzembe fejlesztési környezetekben, nem szeretné engedélyezni a naplózást. Egyetlen sablont szeretne használni az erőforrások üzembe helyezéséhez az összes környezetben.

Ebben a leckében megtanulhatja, hogyan helyezhet üzembe erőforrásokat feltételesen.

Alapfeltételek használata

Amikor üzembe helyez egy erőforrást a Bicep-ben, megadhatja a if kulcsszót, majd egy feltételt. A feltételnek logikai (igaz vagy hamis) értékre kell feloldódnia. Ha az érték igaz, az erőforrás üzembe lesz helyezve. Ha az érték hamis, az erőforrás nincs üzembe helyezve.

Gyakori, hogy a megadott paraméterek értékei alapján hoz létre feltételeket. Az alábbi kód például csak akkor helyez üzembe tárfiókot, ha a deployStorageAccount paraméter értéke true:

param deployStorageAccount bool

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

Figyelje meg, hogy a if kulcsszó ugyanabban a sorban van, mint az erőforrás-definíció.

Kifejezések használata feltételként

Az előző példa meglehetősen egyszerű volt. A deployStorageAccount paraméter típusa voltbool, így egyértelmű, hogy értéke vagy falseértéke vantrue.

A Bicepben a feltételek kifejezéseket is tartalmazhatnak. A következő példában a kód csak akkor helyez üzembe SQL-naplózási erőforrást, ha a environmentName paraméter értéke megegyezik a következővel 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: {
  }
}

Általában érdemes létrehozni egy változót a feltételként használt kifejezéshez. Így a sablon könnyebben érthető és olvasható. Példa:

@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: {
  }
}

Feltételesen üzembe helyezett erőforrásoktól függ

Az erőforrások feltételes üzembe helyezésekor időnként tisztában kell lennie azzal, hogy a Bicep hogyan értékeli ki a köztük lévő függőségeket.

Folytassuk néhány Bicep-kód írását az SQL-naplózási beállítások üzembe helyezéséhez. A Bicep-fájlnak egy tárfiók-erőforrást is deklarálnia kell, ahogy az itt látható:

@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: {
  }
}

Figyelje meg, hogy a tárfióknak is van egy feltétele. Ez azt jelenti, hogy nem éles környezetekben sem lesz üzembe helyezve. Az SQL naplózási beállítások erőforrása mostantól a tárfiók részleteire is hivatkozhat:

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 : ''
  }
}

Figyelje meg, hogy ez a Bicep-kód a kérdőjel (?) operátort használja a storageEndpoint tulajdonságokon storageAccountAccessKey belül. Amikor a Bicep-kód éles környezetben van üzembe helyezve, a rendszer kiértékeli a kifejezéseket a tárfiókból származó részletekre. Ha a kód nem éles környezetben van üzembe helyezve, a kifejezések üres sztringre ('') lesznek kiértékelve.

Felmerülhet a kérdés, hogy miért van szükség erre a kódra, mert auditingSettingsauditStorageAccount mindkettő ugyanazzal a feltétellel rendelkezik, ezért soha nem kell sql-naplózási beállításokat tartalmazó erőforrást üzembe helyeznie tárfiók nélkül. Bár ez igaz, az Azure Resource Manager kiértékeli a tulajdonságkifejezéseket az erőforrások feltételes feltétele előtt. Ez azt jelenti, hogy ha a Bicep-kód nem rendelkezik ezzel a kifejezéssel, az üzembe helyezés hiba miatt ResourceNotFound meghiúsul.

Megjegyzés:

Nem definiálhat két azonos nevű erőforrást ugyanabban a Bicep-fájlban, majd feltételesen csak az egyiket helyezheti üzembe. Az üzembe helyezés sikertelen lesz, mert a Resource Manager ütközésnek tekinti ezt.

Ha több erőforrással rendelkezik, amelyek mindegyike ugyanazzal a feltétellel rendelkezik az üzembe helyezéshez, fontolja meg a Bicep-modulok használatát. Létrehozhat egy modult, amely üzembe helyezi az összes erőforrást, majd feltételt adhat a modul deklarációjához a fő Bicep-fájlban.