Provádění smyčky řízení a vnoření smyček
Pomocí funkce výkonných smyček kopírování můžete vytvářet dynamické a flexibilní šablony. Je důležité pochopit, jak řídit způsob, jakým se smyčky spouštějí při vytváření prostředků a jak používat smyčky k nastavení vlastností prostředků a vnořování smyček.
V této lekci se naučíte řídit spouštění smyček kopírování a jak používat smyčky vlastností prostředků a vnořené smyčky v Bicep.
Poznámka:
Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.
Provádění řídicí smyčky
Azure Resource Manager ve výchozím nastavení vytváří prostředky ze smyček paralelně a v ne deterministickém pořadí. Když jste vytvořili smyčky v předchozích cvičeních, vytvořily se současně oba logické servery Azure SQL. To pomáhá zkrátit celkovou dobu nasazení, protože všechny prostředky ve smyčce se nasazují najednou.
V některých případech ale možná budete muset prostředky nasazovat ve smyčce postupně místo paralelně nebo nasazovat malé dávky změn paralelně. Pokud máte například ve svém produkčním prostředí hodně aplikací služby Aplikace Azure, můžete chtít nasadit změny jenom na malé číslo najednou, aby se zabránilo restartování všech aktualizací současně.
Způsob spouštění smyček kopírování v Bicep můžete řídit pomocí dekorátoru @batchSize
. Umístěte dekorátor na deklaraci prostředku nebo modulu s klíčovým slovem for
.
Podívejme se na ukázkovou definici Bicep pro sadu aplikací App Service bez dekorátoru @batchSize
:
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
Všechny prostředky v této smyčce se nasadí současně paralelně:
Nyní použijeme @batchSize
dekorátor s hodnotou 2
:
@batchSize(2)
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
Když šablonu nasadíte, Bicep se nasadí v dávkách dvou:
Poznámka:
Bicep čeká na dokončení každé úplné dávky, než přejde na další. Pokud v předchozím příkladu aplikace 2 dokončí nasazení před aplikací 1, bicep čeká, dokud se aplikace 1 nedokončí, než začne nasazovat aplikaci 3.
Můžete také informovat Bicep, aby spouštět smyčku postupně, a to nastavením na @batchSize
1
:
@batchSize(1)
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
Když šablonu nasadíte, Bicep čeká na dokončení každého nasazení prostředků, než se spustí další:
Použití smyček s vlastnostmi prostředku
Pomocí smyček můžete nastavit vlastnosti prostředku. Když například nasadíte virtuální síť, musíte zadat její podsítě. Podsíť musí mít dva důležité informace: název a předponu adresy. Parametr můžete použít s polem objektů, abyste mohli pro každé prostředí zadat různé podsítě:
param subnetNames array = [
'api'
'worker'
]
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-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'
}
}]
}
}
V tomto příkladu si všimněte, že smyčka for
se zobrazí v definici prostředku kolem subnets
hodnoty vlastnosti.
Vnořené smyčky
Některé scénáře vyžadují použití smyčky uvnitř jiné smyčky nebo vnořené smyčky. Vnořené smyčky můžete vytvářet pomocí bicep.
Pro vaši společnost s teddy medvědem toy, musíte nasadit virtuální sítě v každé zemi nebo oblasti, kde se to bude spouštět. Každá virtuální síť potřebuje jiný adresní prostor a dvě podsítě. Začněme nasazením virtuálních sítí ve smyčce:
param locations array = [
'westeurope'
'eastus2'
'eastasia'
]
var subnetCount = 2
resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for (location, i) in locations : {
name: 'vnet-${location}'
location: location
properties: {
addressSpace:{
addressPrefixes:[
'10.${i}.0.0/16'
]
}
}
}]
Tato smyčka nasadí virtuální sítě pro každé umístění a nastaví addressPrefix
virtuální síť pomocí indexu smyčky, aby každá virtuální síť získala jinou předponu adresy.
K nasazení podsítí v rámci každé virtuální sítě můžete použít vnořenou smyčku:
resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-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'
}
}]
}
}]
Vnořená smyčka používá range()
funkci k vytvoření dvou podsítí.
Při nasazení šablony získáte následující virtuální sítě a podsítě:
Název virtuální sítě | Poloha | Předpona adresy | Podsítě |
---|---|---|---|
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 |