Változó- és kimeneti ciklusok használata
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.