Erőforrások feltételes üzembe helyezése
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@2023-05-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@2023-08-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@2023-08-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@2023-05-01' = if (auditingEnabled) {
name: auditStorageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
}
resource auditingSettings 'Microsoft.Sql/servers/auditingSettings@2023-08-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@2023-08-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 auditingSettings
auditStorageAccount
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.