Steuern der Schleifenausführung und Schachteln von Schleifen
Mithilfe des leistungsstarken Kopierschleifenfeatures können Sie dynamische und flexible Vorlagen erstellen. Es ist wichtig zu verstehen, wie die Ausführung von Schleifen beim Erstellen von Ressourcen gesteuert wird und wie Schleifen zum Festlegen von Ressourceneigenschaften und zum Schachteln von Schleifen verwendet werden.
In dieser Lerneinheit erfahren Sie, wie Sie die Ausführung von Kopierschleifen steuern und Ressourceneigenschaftsschleifen und geschachtelte Schleifen in Bicep verwenden.
Hinweis
Die Befehle in dieser Lerneinheit dienen der Veranschaulichung der Konzepte. Führen Sie die Befehle jetzt noch nicht aus. Sie können das Erlernte in Kürze üben.
Steuern der Schleifenausführung
Standardmäßig erstellt Azure Resource Manager Ressourcen aus Schleifen parallel und in einer nicht deterministischen Reihenfolge. Als Sie in den vorherigen Übungen Schleifen erstellt haben, wurden beide logischen Azure SQL-Server zur gleichen Zeit erstellt. Dies trägt dazu bei, die Gesamtbereitstellungszeit zu reduzieren, da alle Ressourcen innerhalb der Schleife gleichzeitig bereitgestellt werden.
In einigen Fällen muss die Bereitstellung von Ressourcen in Schleifen jedoch sequenziell statt parallel erfolgen, oder Sie müssen kleine Batches von Änderungen parallel bereitstellen. Wenn Sie in Ihrer Produktionsumgebung beispielsweise über viele Azure App Service-Apps verfügen, sollten Sie Änderungen immer nur auf einer kleinen Anzahl gleichzeitig bereitstellen, um zu verhindern, dass sie durch die Updates alle gleichzeitig neu gestartet werden.
Mithilfe des Decorators @batchSize
können Sie steuern, wie Ihre Kopierschleifen in Bicep ausgeführt werden. Legen Sie den Decorator für die Ressourcen- oder Moduldeklaration mit dem Schlüsselwort for
fest.
Sehen wir uns eine Bicep-Beispieldefinition für eine Reihe von App Service-Anwendungen ohne den Decorator @batchSize
an:
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
Alle Ressourcen in dieser Schleife werden gleichzeitig bereitgestellt:
Nun wenden wir den Decorator @batchSize
mit dem Wert 2
an:
@batchSize(2)
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
Wenn Sie die Vorlage bereitstellen, führt Bicep die Bereitstellung in Zweierbatches durch:
Hinweis
Bicep wartet, bis jeder Batch vollständig abgeschlossen ist, bevor der Vorgang mit dem nächsten Batch fortgesetzt wird. Wenn im vorherigen Beispiel die Bereitstellung von app2 vor der von app1 abgeschlossen ist, wartet Bicep auf den Abschluss von app1, bevor die Bereitstellung von app3 gestartet wird.
Sie können Bicep auch anweisen, die Schleife sequenziell auszuführen, indem Sie @batchSize
auf 1
festlegen:
@batchSize(1)
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = [for i in range(1,3): {
name: 'app${i}'
// ...
}]
Wenn Sie die Vorlage bereitstellen, wartet Bicep auf den Abschluss der einzelnen Ressourcenbereitstellungen, bevor die jeweils nächste gestartet wird:
Verwenden von Schleifen mit Ressourceneigenschaften
Mithilfe von Schleifen können Sie Ressourceneigenschaften festlegen. Wenn Sie beispielsweise ein virtuelles Netzwerk bereitstellen, müssen Sie dessen Subnetze angeben. Ein Subnetz muss über zwei wichtige Informationen verfügen: einen Namen und ein Adresspräfix. Sie können einen Parameter mit einem Array von Objekten verwenden, damit Sie für jede Umgebung unterschiedliche Subnetze angeben können:
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'
}
}]
}
}
Beachten Sie in diesem Beispiel, dass die Schleife for
innerhalb der Ressourcendefinition um den Eigenschaftswert subnets
herum angezeigt wird.
Geschachtelte Schleifen
In einigen Szenarien müssen Sie eine Schleife innerhalb einer anderen Schleife, eine geschachtelte Schleife, verwenden. Sie können geschachtelte Schleifen mithilfe von Bicep erstellen.
Für Ihr Teddybär-Spielwarenunternehmen müssen Sie virtuelle Netzwerke in jedem/r Land/Region bereitstellen, in dem das Spielzeug auf den Markt gebracht wird. Jedes virtuelle Netzwerk benötigt einen anderen Adressraum und zwei Subnetze. Wir beginnen mit der Bereitstellung der virtuellen Netzwerke in einer Schleife:
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'
]
}
}
}]
Mit dieser Schleife werden die virtuellen Netzwerke für die einzelnen Standorte bereitgestellt, und addressPrefix
wird für das virtuelle Netzwerk mithilfe des Schleifenindexes festgelegt, um sicherzustellen, dass jedes virtuelle Netzwerk ein anderes Adresspräfix erhält.
Über eine geschachtelte Schleife können Sie die Subnetze innerhalb der einzelnen virtuellen Netzwerke bereitstellen:
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'
}
}]
}
}]
Die geschachtelte Schleife verwendet die Funktion range()
, um zwei Subnetze zu erstellen.
Wenn Sie die Vorlage bereitstellen, erhalten Sie die folgenden virtuellen Netzwerke und Subnetze:
Name des virtuellen Netzwerks | Standort | Adresspräfix | Subnetze |
---|---|---|---|
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 |