Változó- és kimeneti ciklusok használata

Befejeződött

Megtanulta, hogyan használhat másolási hurkokat több erőforráspéldány üzembe helyezéséhez, és hogyan állíthatja be egy erőforrás tulajdonságait hurkok használatával. A Bicepben változókkal és kimenetekkel rendelkező hurkokat is használhat.

A toy cégnél több Azure-régióban is azonos alhálózati konfigurációval rendelkező virtuális hálózatokat kell üzembe helyeznie. Várhatóan a jövőben további alhálózatokat kell hozzáadnia a virtuális hálózatokhoz, ezért rugalmasan szeretné módosítani a Bicep-sablonokat az alhálózat konfigurációjának módosításához.

Mivel több tárfiókot is üzembe fog helyezni az Azure-környezetben, kimenetként kell megadnia az egyes tárfiókok végpontjait, hogy az üzembehelyezési folyamatok használhassák ezeket az információkat.

Ebben a leckében megtanulhatja, hogyan használhat ciklusokat változókkal és kimenetekkel.

Megjegyzés:

Az egység parancsai a fogalmakat szemléltetik. Még ne futtassa a parancsokat. Hamarosan gyakorolja, amit itt tanul.

Változó hurkok

Változó hurkok használatával létrehozhat egy tömböt, amelyet aztán használhat a Bicep-fájlon keresztül. Ahogy más hurkok esetében is, a for kulcsszóval is létrehozhat egy változó hurkot:

var items = [for i in range(1, 5): 'item${i}']

Az előző példa létrehoz egy tömböt, amely tartalmazza az értékeket item1, item2, item3, item4és item5.

Általában változó ciklusokkal hozhat létre összetettebb objektumokat, amelyeket aztán egy erőforrás-deklarációban használhat. Az alábbiakban bemutatjuk, hogyan hozhat létre tulajdonságot subnets változó hurkokkal:

param addressPrefix string = '10.10.0.0/16'
param subnets array = [
  {
    name: 'frontend'
    ipAddressRange: '10.10.0.0/24'
  }
  {
    name: 'backend'
    ipAddressRange: '10.10.1.0/24'
  }
]

var subnetsProperty = [for subnet in subnets: {
  name: subnet.name
  properties: {
    addressPrefix: subnet.ipAddressRange
  }
}]

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-08-01' = {
  name: 'teddybear'
  location: resourceGroup().location
  properties:{
    addressSpace:{
      addressPrefixes:[
        addressPrefix
      ]
    }
    subnets: subnetsProperty
  }
}

Ez a példa a változó ciklusok hatékony használatát szemlélteti: egy egyszerű, könnyen érthető értékeket tartalmazó paramétert összetettebb objektummá alakít, amely megfelel az Azure-erőforrás szükséges definíciójának. A változó ciklusokkal engedélyezheti a paraméterek számára, hogy csak a lista egyes elemeire vonatkozó kulcsinformációkat adja meg. Ezután Bicep-kifejezésekkel vagy alapértelmezett értékekkel állíthat be más szükséges tulajdonságokat az erőforráshoz.

Kimeneti hurkok

A Bicep-kimenetekkel információkat adhat meg az üzemelő példányokról az üzembe helyezést indító felhasználónak vagy eszköznek. A kimeneti hurkok rugalmasságot és teljesítményt biztosítanak a kimeneteken belüli hurkoknak.

Ahogy más hurkok esetében is, a kulcsszóval adja meg a for kimeneti ciklust:

var items = [
  'item1'
  'item2'
  'item3'
  'item4'
  'item5'
]

output outputItems array = [for i in range(0, length(items)): items[i]]

Általában kimeneti hurkokat fog használni a sablonon belüli más hurkokkal együtt. Nézzük meg például azt a Bicep-fájlt, amely a paraméter által locations megadott Azure-régiókban helyez üzembe tárfiókokat:

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource storageAccounts 'Microsoft.Storage/storageAccounts@2021-09-01' = [for location in locations: {
  name: 'toy${uniqueString(resourceGroup().id, location)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Valószínűleg minden létrehozott tárfiókról adatokat kell visszaadnia, például a nevét és a hozzáféréshez használható végpontokat. Egy kimeneti hurok használatával lekérheti ezeket az információkat a Bicep-fájlban.

Megjegyzés:

A Bicep jelenleg nem támogatja a kimeneti cikluson belül létrehozott erőforrások közvetlen hivatkozását. Ez azt jelenti, hogy tömbindexelőkkel kell hozzáférnie az erőforrásokhoz, ahogy az a következő példában is látható.

output storageEndpoints array = [for i in range(0, length(locations)): {
  name: storageAccounts[i].name
  location: storageAccounts[i].location
  blobEndpoint: storageAccounts[i].properties.primaryEndpoints.blob
  fileEndpoint: storageAccounts[i].properties.primaryEndpoints.file
}]

Figyelem

Ne használjon kimeneteket titkos kódok, például hozzáférési kulcsok vagy jelszavak visszaadására. A kimenetek naplózása nem biztonságos adatok kezelésére szolgál.