Több erőforrás üzembe helyezése hurkok használatával

Befejeződött

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 storageAccountNamevá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 sa4kell 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 56a . 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-1neve 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 ineveztü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-easnem sqlserver-eus2, mert az objektum tulajdonsága environmentName nem egyezik Production.