Több erőforrás üzembe helyezése hurkok használatával
Gyakran több, nagyon hasonló erőforrást kell üzembe helyeznie. Ha hurkokat ad hozzá a Bicep-fájlokhoz, elkerülheti az erőforrás-definíciók ismétlését. Ehelyett dinamikusan beállíthatja az üzembe helyezni kívánt erőforrás példányainak számát. Az egyes példányok tulajdonságait testre is szabhatja.
A játékvállalat számára háttérinfrastruktúrát kell üzembe helyeznie, beleértve néhány Azure SQL logikai kiszolgálót is, hogy támogassa az új intelligens mackó elindítását. Egy dedikált logikai kiszolgálót kell üzembe helyeznie minden olyan országban/régióban, ahol elérhető lesz a toy, hogy megfeleljen az egyes országok/régiók adatvédelmi törvényeinek.
A helyükön kívül minden logikai kiszolgáló ugyanúgy lesz konfigurálva. Bicep-kóddal szeretné üzembe helyezni a logikai kiszolgálókat, és egy paraméterrel megadhatja azokat a régiókat, amelyekbe a logikai kiszolgálókat telepíteni kell.
Ebben a leckében megtanulhatja, hogyan helyezhet üzembe több erőforráspéldányt másolási hurkok használatával.
Megjegyzés:
Az egység parancsai a fogalmakat szemléltetik. Még ne futtassa a parancsokat. Hamarosan gyakorolja, amit itt tanul.
Másolási hurkok használata
Amikor erőforrást vagy modult definiál egy Bicep-sablonban, a for
kulcsszóval létrehozhat egy hurkot. Helyezze a kulcsszót for
az erőforrás-deklarációba, majd adja meg, hogy a Bicep hogyan azonosítsa a ciklus egyes elemeit. Egy erőforrás több példányának létrehozásához általában egy objektumtömbön hurkol. Az alábbi példa több tárfiókot helyez üzembe, és a nevük paraméterértékként van megadva:
param storageAccountNames array = [
'saauditus'
'saauditeurope'
'saauditapac'
]
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2023-05-01' = [for storageAccountName in storageAccountNames: {
name: storageAccountName
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}]
Ebben a példában a hurok végighalad a tömb minden elemén storageAccountNames
. Minden alkalommal, amikor a Bicep végighalad a hurokon, az aktuális értéket egy speciális, úgynevezett storageAccountName
változóba helyezi, és a tulajdonság értékeként name
használják. Figyelje meg, hogy a Bicep megköveteli, hogy a kulcsszó elé egy nyitó zárójel ([
) karaktert, az for
erőforrásdefiníció után pedig egy záró zárójel (]
) karaktert helyezzen el.
Ha üzembe helyezte ezt a Bicep-fájlt, láthatja, hogy három tárfiók jött létre, a nevüket pedig a storageAccountNames
tömb megfelelő elemei adták meg.
Hurkok száma alapján
Előfordulhat, hogy bizonyos számú erőforrás létrehozásához hurkot kell létrehoznia, és nem tömböt kell használnia forrásként. A Bicep biztosítja a range()
függvényt, amely számtömböt hoz létre. Ha például négy tárfiókot sa1
sa4
kell létrehoznia, az alábbihoz hasonló erőforrás-definíciót használhat:
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2023-05-01' = [for i in range(1,4): {
name: 'sa${i}'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}]
A függvény használatakor meg kell adnia a range()
kezdőértéket és a létrehozni kívánt értékek számát. Ha például olyan tárfiókokat szeretne létrehozni, amelynek a neve sa0
, sa1
és sa2
, akkor a függvényt range(0,3)
használná.
Megjegyzés:
A függvény használatakor range()
két argumentumot kell megadnia. Az első megadja a kezdőértéket, a második pedig a Bicepnek a kívánt értékek számát. Ha például a függvényt használjarange(3,4)
, akkor a Bicep visszaadja az értékeket 3
, 4
és 5
6
a . Győződjön meg arról, hogy a megfelelő számú értéket kéri, különösen akkor, ha 0 kezdőértéket használ.
Az iterációs index elérése
A Bicep segítségével a tömbökön keresztül iterálhat, és lekérheti a tömb aktuális elemének indexét. Tegyük fel például, hogy minden tömb által megadott helyen létre szeretne hozni egy logikai kiszolgálót, és azt szeretné, hogy a kiszolgálók sqlserver-1
neve legyen , sqlserver-2
és így tovább. Ezt a következő Bicep-kóddal érheti el:
param locations array = [
'westeurope'
'eastus2'
'eastasia'
]
resource sqlServers 'Microsoft.Sql/servers@2023-08-01-preview' = [for (location, i) in locations: {
name: 'sqlserver-${i+1}'
location: location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}
}]
Figyelje meg, hogy a name
tulajdonság tartalmazza a kifejezést i+1
. Az indexváltozó első értéke i
nulla, ezért hozzá kell adnia +1
, ha azt szeretné, hogy a kiszolgálónevek kezdődjenek 1
.
Tipp.
Ebben a példában az indexváltozót i
neveztük el. Ez a Bicep szabványa. Azonban bármilyen nevet használhat.
Elemek szűrése hurkokkal
Bizonyos esetekben előfordulhat, hogy az erőforrásokat másolási ciklusok és feltételek együttes használatával szeretné üzembe helyezni. Ezt a kulcsszavak és for
a if
kulcsszavak kombinálásával teheti meg.
Az alábbi példában a kód egy tömbparamétert használ logikai kiszolgálók halmazának meghatározásához. A másolási hurok egy feltételt használ a kiszolgálók üzembe helyezéséhez, csak akkor, ha a environmentName
hurokobjektum tulajdonsága egyenlő Production
:
param sqlServerDetails array = [
{
name: 'sqlserver-we'
location: 'westeurope'
environmentName: 'Production'
}
{
name: 'sqlserver-eus2'
location: 'eastus2'
environmentName: 'Development'
}
{
name: 'sqlserver-eas'
location: 'eastasia'
environmentName: 'Production'
}
]
resource sqlServers 'Microsoft.Sql/servers@2023-08-01-preview' = [for sqlServer in sqlServerDetails: if (sqlServer.environmentName == 'Production') {
name: sqlServer.name
location: sqlServer.location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}
tags: {
environment: sqlServer.environmentName
}
}]
Ha az előző példát telepítette, két logikai kiszolgáló jelenik meg, sqlserver-we
de sqlserver-eas
nem sqlserver-eus2
, mert az objektum tulajdonsága environmentName
nem egyezik Production
.