Hurokvégrehajtás és beágyazási hurkok szabályozása

Befejeződött

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:

Diagram showing time on the horizontal axis, with app1, app2, and app3 stacked vertically to be deployed at the same time.

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:

Diagram showing time on the horizontal axis, with app1 and app2 stacked to run as one batch, and app3 to run as a second batch.

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:

Diagram showing time on the horizontal axis, with app1, app2, and app3 being deployed sequentially.

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