Hurokvégrehajtás és beágyazási hurkok szabályozása
A hatékony másolási ciklusok funkcióval dinamikus és rugalmas sablonokat hozhat létre. Fontos megérteni, hogyan szabályozható a ciklusok végrehajtásának módja az erőforrások létrehozásakor, és hogyan használhatók hurkok az erőforrástulajdonságok és a beágyazási hurkok beállításához.
Ebben a leckében megtudhatja, hogyan szabályozhatja a másolási hurkok végrehajtását, és hogyan használhatja az erőforrástulajdonság-hurkokat és a beágyazott hurkokat a Bicep-ben.
Megjegyzés:
Az egység parancsai a fogalmakat szemléltetik. Még ne futtassa a parancsokat. Hamarosan gyakorolja, amit itt tanul.
A ciklus végrehajtásának szabályozása
Az Azure Resource Manager alapértelmezés szerint párhuzamos és nem determinisztikus sorrendben hoz létre erőforrásokat ciklusokból. Amikor az előző gyakorlatokban hurkokat hozott létre, mindkét Azure SQL logikai kiszolgáló egyszerre lett létrehozva. Ez segít csökkenteni a teljes üzembe helyezési időt, mivel a ciklusban lévő összes erőforrás egyszerre van üzembe helyezve.
Bizonyos esetekben azonban előfordulhat, hogy az erőforrásokat egymás után kell üzembe helyeznie, nem pedig párhuzamosan, vagy kisebb módosítási kötegeket kell párhuzamosan üzembe helyeznie. Ha például sok Azure-alkalmazás Service-alkalmazás van az éles környezetben, érdemes lehet egyszerre csak kis számúra telepíteni a módosításokat, hogy a frissítések egyszerre ne induljanak újra.
A dekoratőrrel szabályozhatja a másolási ciklusok Bicepben való futtatását @batchSize
. Helyezze a dekoratőrt az erőforrás- vagy moduldeklarációra a for
kulcsszóval.
Tekintsünk meg egy példa Bicep-definíciót az App Service-alkalmazások dekorátor nélküli @batchSize
készletéhez:
resource appServiceApp 'Microsoft.Web/sites@2021-03-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
A ciklus összes erőforrása egyszerre lesz üzembe helyezve, párhuzamosan:
Most alkalmazzuk a dekorátort a @batchSize
következő 2
értékkel:
@batchSize(2)
resource appServiceApp 'Microsoft.Web/sites@2021-03-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
A sablon üzembe helyezésekor a Bicep két kötegben fog üzembe helyezni:
Megjegyzés:
A Bicep megvárja, amíg az egyes teljes kötegek befejeződnek, mielőtt továbblép a következőre. Az előző példában, ha az app2 az 1. alkalmazás előtt befejezi az üzembe helyezést, a Bicep megvárja, amíg az app1 befejeződik, mielőtt elkezdené az app3 telepítését.
Azt is megadhatja a Bicepnek, hogy a ciklust egymás után futtassa, ha a következőt 1
állítja @batchSize
be:
@batchSize(1)
resource appServiceApp 'Microsoft.Web/sites@2021-03-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
A sablon üzembe helyezésekor a Bicep megvárja, amíg az egyes erőforrás-üzembe helyezések befejeződnek, mielőtt elindítja a következőt:
Ciklusok használata erőforrás-tulajdonságokkal
Az erőforrástulajdonságok beállításához hurkokat használhat. Például egy virtuális hálózat üzembe helyezésekor meg kell adnia annak alhálózatait. Az alhálózatnak két fontos információval kell rendelkeznie: egy névvel és egy címelőtaggal. A paramétereket objektumtömbökkel is használhatja, így különböző alhálózatokat adhat meg az egyes környezetekhez:
param subnetNames array = [
'api'
'worker'
]
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-08-01' = {
name: 'teddybear'
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [for (subnetName, i) in subnetNames: {
name: subnetName
properties: {
addressPrefix: '10.0.${i}.0/24'
}
}]
}
}
Ebben a példában figyelje meg, hogy a for
hurok az erőforrás-definícióban, a subnets
tulajdonságérték körül jelenik meg.
Beágyazott hurkok
Egyes helyzetekben egy hurkot kell használnia egy másik hurkon belül, vagy beágyazott hurkot. Beágyazott hurkokat a Bicep használatával hozhat létre.
A mackó játékvállalat számára virtuális hálózatokat kell üzembe helyeznie minden országban/régióban, ahol a játék el lesz indítva. Minden virtuális hálózatnak más címtérre és két alhálózatra van szüksége. Kezdjük a virtuális hálózatok hurokban való üzembe helyezésével:
param locations array = [
'westeurope'
'eastus2'
'eastasia'
]
var subnetCount = 2
resource virtualNetworks 'Microsoft.Network/virtualNetworks@2021-08-01' = [for (location, i) in locations : {
name: 'vnet-${location}'
location: location
properties: {
addressSpace:{
addressPrefixes:[
'10.${i}.0.0/16'
]
}
}
}]
Ez a hurok minden helyhez telepíti a virtuális hálózatokat, és a addressPrefix
ciklusindex használatával beállítja a virtuális hálózat számára, hogy minden virtuális hálózat más címelőtagot kapjon.
Beágyazott hurok használatával üzembe helyezheti az alhálózatokat az egyes virtuális hálózatokon:
resource virtualNetworks 'Microsoft.Network/virtualNetworks@2021-08-01' = [for (location, i) in locations : {
name: 'vnet-${location}'
location: location
properties: {
addressSpace:{
addressPrefixes:[
'10.${i}.0.0/16'
]
}
subnets: [for j in range(1, subnetCount): {
name: 'subnet-${j}'
properties: {
addressPrefix: '10.${i}.${j}.0/24'
}
}]
}
}]
A beágyazott hurok a range()
függvény használatával hoz létre két alhálózatot.
A sablon üzembe helyezésekor a következő virtuális hálózatokat és alhálózatokat kapja meg:
Virtuális hálózat neve | Hely | Címelőtag | Subnets |
---|---|---|---|
vnet-westeurope |
westeurope |
10.0.0.0/16 |
10.0.1.0/24 , 10.0.2.0/24 |
vnet-eastus2 |
eastus2 |
10.1.0.0/16 |
10.1.1.0/24 , 10.1.2.0/24 |
vnet-eastasia |
eastasia |
10.2.0.0/16 |
10.2.1.0/24 , 10.2.2.0/24 |