Was-wäre-wenn-Vorgang für die Bicep-Bereitstellung
Vor dem Bereitstellen einer Bicep-Datei können Sie eine Vorschau der Änderungen anzeigen, die vorgenommen werden. Der von Azure Resource Manager bereitgestellte Was-wäre-wenn-Vorgang zeigt, wie sich Ressourcen ändern, wenn Sie die Bicep-Datei bereitstellen. Der Was-wäre-wenn-Vorgang nimmt keine Änderungen an vorhandenen Ressourcen vor. Stattdessen sagt er die Änderungen vorher, die vorgenommen werden, wenn die angegebene Bicep-Datei bereitgestellt wird.
Sie können den Was-wäre-wenn-Vorgang mit Azure PowerShell-, Azure CLI- oder REST-API-Vorgängen verwenden. Der Was-wäre-wenn-Vorgang wird für Bereitstellungen auf Ressourcengruppen-, Abonnements-, Verwaltungsgruppen- und Mandantenebene unterstützt.
Während Was-wäre-wenn-Vorgängen werden die Auswertung und Erweiterung von templateLink
nicht unterstützt. Daher werden alle Ressourcen, die mithilfe von Vorlagenlinks in geschachtelten Bereitstellungen bereitgestellt werden, einschließlich Vorlagenspezifikationsverweisen, in den Ergebnissen des Was-wäre-wenn-Vorgangs nicht angezeigt.
Schulungsressourcen
Wenn Sie sich lieber anhand einer Schritt-für-Schritt-Anleitung über den Was-wäre-wenn-Vorgang informieren möchten, finden Sie weitere Informationen unter Vorschau auf Azure-Bereitstellungsänderungen mithilfe von what-if.
Erforderliche Berechtigungen
Zum Bereitstellen einer Bicep-Datei oder ARM-Vorlage benötigen Sie Schreibzugriff auf die Ressourcen, die Sie bereitstellen, und Zugriff auf alle Vorgänge für den Ressourcentyp Microsoft.Resources/deployments. Um beispielsweise eine VM bereitstellen zu können, benötigen Sie die Berechtigungen Microsoft.Compute/virtualMachines/write
und Microsoft.Resources/deployments/*
. Für den Was-wäre-wenn-Vorgang gelten die gleichen Berechtigungsanforderungen.
Eine Liste der Rollen und Berechtigungen finden Sie unter Integrierte Azure-Rollen.
Was-wäre-wenn-Grenzwerte
Was-wäre-wenn erweitert geschachtelte Vorlagen, bis diese Grenzwerte erreicht sind:
- 500 geschachtelte Vorlagen.
- 800 Ressourcengruppen in einer Ressourcengruppenbereitstellung.
- Die Dauer für das Erweitern der geschachtelten Vorlagen erreicht fünf Minuten.
Wenn einer dieser Grenzwerte erreicht ist, wird der Änderungstyp der übrigen Ressourcen auf Ignorieren festgelegt.
Installieren des Azure PowerShell-Moduls
Wenn Sie den Was-wäre-wenn-Vorgang in PowerShell verwenden möchten, benötigen Sie Version 4.2 oder höher des Az-Moduls.
Führen Sie folgenden Befehl aus, um das Modul zu installieren:
Install-Module -Name Az -Force
Weitere Informationen zum Installieren von Modulen finden Sie unter Installieren von Azure PowerShell.
Installieren des Azure CLI-Moduls
Um „Was-wäre-wenn“ in Azure CLI zu verwenden, müssen Sie über Azure CLI 2.14.0 oder höher verfügen. Bei Bedarf installieren Sie die neueste Version von Azure CLI.
Anzeigen der Ergebnisse
Wenn Sie Was-wäre-wenn in PowerShell oder Azure CLI verwenden, enthält die Ausgabe farbcodierte Ergebnisse, die Ihnen helfen, die verschiedenen Arten von Änderungen anzuzeigen.
Die Textausgabe lautet:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Hinweis
Der Was-wäre-wenn-Vorgang kann die Reference-Funktion nicht auflösen. Jedes Mal, wenn Sie eine Eigenschaft auf einen Vorlagenausdruck festlegen, der die Reference-Funktion enthält, meldet der Was-wäre-wenn-Vorgang, dass sich die Eigenschaft ändern wird. Dieses Verhalten tritt auf, weil der Was-wäre-wenn-Vorgang den aktuellen Eigenschaftswert (z. B. true
oder false
bei einem booleschen Wert) mit dem nicht aufgelösten Vorlagenausdruck vergleicht. Natürlich stimmen diese Werte nicht überein. Wenn Sie die Bicep-Datei bereitstellen, ändert sich die Eigenschaft nur, wenn der Vorlagenausdruck zu einem anderen Wert aufgelöst wird.
Was-wäre-wenn-Befehle
Azure PowerShell
Wenn Sie vor der Bereitstellung einer Bicep-Datei eine Vorschau der Änderungen anzeigen möchten, können Sie New-AzResourceGroupDeployment oder New-AzSubscriptionDeployment verwenden. Fügen Sie dem Bereitstellungsbefehl den -Whatif
-Parameter hinzu.
New-AzResourceGroupDeployment -Whatif
für Bereitstellungen von RessourcengruppenNew-AzSubscriptionDeployment -Whatif
undNew-AzDeployment -Whatif
für Bereitstellungen auf Abonnementebene
Sie können auch den Parameterschalter -Confirm
verwenden, um eine Vorschau der Änderungen anzuzeigen und dann eine Aufforderung zum Fortsetzen der Bereitstellung zu erhalten.
New-AzResourceGroupDeployment -Confirm
für Bereitstellungen von RessourcengruppenNew-AzSubscriptionDeployment -Confirm
undNew-AzDeployment -Confirm
für Bereitstellungen auf Abonnementebene
Die vorangehenden Befehle geben eine Textzusammenfassung zurück, die Sie manuell überprüfen können. Führen Sie Get-AzResourceGroupDeploymentWhatIfResult oder Get-AzSubscriptionDeploymentWhatIfResult aus, um ein Objekt abzurufen, das programmgesteuert auf Änderungen prüfen kann.
$results = Get-AzResourceGroupDeploymentWhatIfResult
für Bereitstellungen von Ressourcengruppen$results = Get-AzSubscriptionDeploymentWhatIfResult
oder$results = Get-AzDeploymentWhatIfResult
für Bereitstellungen auf Abonnementebene
Azure CLI
Wenn Sie vor der Bereitstellung einer Bicep-Datei eine Vorschau der Änderungen anzeigen möchten, können Sie Folgendes verwenden:
- az deployment group what-if für Bereitstellungen von Ressourcengruppen
- az deployment sub what-if für Bereitstellungen auf Abonnementebene
- az deployment mg what-if für Bereitstellungen von Verwaltungsgruppen
- az deployment tenant what-if für Bereitstellungen von Mandanten
Sie können den Parameterschalter --confirm-with-what-if
(oder seine Kurzform -c
) verwenden, um eine Vorschau der Änderungen anzuzeigen und dann zum Fortsetzen der Bereitstellung aufgefordert zu werden. Fügen Sie diesen Schalter zu folgenden Befehlen hinzu:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Verwenden Sie beispielsweise az deployment group create --confirm-with-what-if
oder -c
für Bereitstellungen von Ressourcengruppen.
Die vorangehenden Befehle geben eine Textzusammenfassung zurück, die Sie manuell überprüfen können. Um ein JSON-Objekt zu erhalten, das Sie programmgesteuert auf Änderungen überprüfen können, verwenden Sie den Schalter --no-pretty-print
. Verwenden Sie beispielsweise az deployment group what-if --no-pretty-print
für Bereitstellungen von Ressourcengruppen.
Wenn die Ergebnisse ohne Farben zurückgegeben werden sollen, öffnen Sie die Konfigurationsdatei in der Azure CLI. Legen Sie no_color auf yes fest.
Azure-REST-API
Verwenden Sie für die REST-API Folgendes:
- Bereitstellungen – Was-wäre-wenn für Bereitstellungen von Ressourcengruppen
- Bereitstellungen – Was-wäre-wenn im Abonnementbereich für Bereitstellungen von Abonnements
- Bereitstellungen – Was-wäre-wenn im Verwaltungsgruppenbereich für Bereitstellungen von Verwaltungsgruppen
- Bereitstellungen – Was-wäre-wenn im Mandantenbereich für Bereitstellungen von Mandanten.
Änderungstypen
Der Was-wäre-wenn-Vorgang listet sieben verschiedene Typen von Änderungen auf:
- Create (Erstellen): Die Ressource ist aktuell nicht vorhanden, aber in der Bicep-Datei definiert. Die Ressource wird erstellt.
- Delete (Löschen): Dieser Änderungstyp ist nur relevant, wenn der Modus „Vollständig“ für die JSON-Vorlagenbereitstellung verwendet wird. Die Ressource ist vorhanden, aber nicht in der Bicep-Datei definiert. Im Modus „Vollständig“ wird die Ressource gelöscht. In diesem Änderungstyp werden nur Ressourcen eingeschlossen, die das Löschen im Modus „Vollständig“ unterstützen.
- Ignore (Ignorieren): Die Ressource ist vorhanden, aber nicht in der Bicep-Datei definiert. Die Ressource wird weder bereitgestellt noch geändert. Wenn Sie die Grenzwerte für das Erweitern geschachtelter Vorlagen erreichen, werden Sie auf diesen Änderungstyp stoßen. Siehe Was-wäre-wenn-Grenzwerte.
- NoChange (Keine Änderung): Die Ressource ist vorhanden und in der Bicep-Datei definiert. Die Ressource wird erneut bereitgestellt, wobei sich die Eigenschaften der Ressource aber nicht ändern. Dieser Änderungstyp wird zurückgegeben, wenn ResultFormat auf
FullResourcePayloads
festgelegt ist, wobei es sich um den Standardwert handelt. - NoEffect: Die Eigenschaft ist schreibgeschützt und wird vom Dienst ignoriert. Beispielsweise wird die Eigenschaft
sku.tier
immer so festgelegt, dass sie im NamespaceMicrosoft.ServiceBus
mitsku.name
übereinstimmt. - Modify (Ändern): Die Ressource ist vorhanden und in der Bicep-Datei definiert. Die Ressource wird erneut bereitgestellt, und die Eigenschaften der Ressource ändern sich. Dieser Änderungstyp wird zurückgegeben, wenn ResultFormat auf
FullResourcePayloads
festgelegt ist, wobei es sich um den Standardwert handelt. - Deploy (Bereitstellen): Die Ressource ist vorhanden und in der Bicep-Datei definiert. Die Ressource wird erneut erstellt. Die Eigenschaften der Ressource können sich ändern oder auch nicht. Der Vorgang gibt diesen Änderungstyp zurück, wenn er nicht über genügend Informationen verfügt, um zu bestimmen, ob sich Eigenschaften ändern. Diese Bedingung wird nur angezeigt, wenn ResultFormat auf
ResourceIdOnly
festgelegt ist.
Ergebnisformat
Sie können den Grad der Detailliertheit der Informationen steuern, die in Bezug auf die vorhergesagten Änderungen zurückgegeben werden. Sie haben zwei Möglichkeiten:
- FullResourcePayloads: Gibt eine Liste der Ressourcen zurück, die sich ändern, sowie Details zu den Eigenschaften, die sich ändern.
- ResourceIdOnly: Gibt eine Liste der Ressourcen zurück, die sich ändern.
Der Standardwert ist FullResourcePayloads.
Verwenden Sie für PowerShell-Bereitstellungsbefehle den Parameter -WhatIfResultFormat
. Verwenden Sie in den Befehlen für programmgesteuerte Objekte den Parameter ResultFormat
.
Verwenden Sie für die Azure CLI den Parameter --result-format
.
Die folgenden Ergebnisse zeigen die zwei unterschiedlichen Ausgabeformate:
Vollständige Ressourcennutzlasten
Resource and property changes are indicated with these symbols: - Delete + Create ~ Modify The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01] - tags.Owner: "Team A" ~ properties.addressSpace.addressPrefixes: [ - 0: "10.0.0.0/16" + 0: "10.0.0.0/15" ] ~ properties.subnets: [ - 0: name: "subnet001" properties.addressPrefix: "10.0.0.0/24" ] Resource changes: 1 to modify.
Nur Ressourcen-ID
Resource and property changes are indicated with this symbol: ! Deploy The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ! Microsoft.Network/virtualNetworks/vnet-001 Resource changes: 1 to deploy.
Ausführen des Was-wäre-wenn-Vorgangs
Einrichten der Umgebung
Um zu sehen, wie Was-wäre-wenn funktioniert, führen wir nun einige Tests aus. Stellen Sie zunächst eine Bicep-Datei zum Erstellen eines virtuellen Netzwerks bereit. Sie verwenden dieses virtuelle Netzwerk, um zu testen, wie Änderungen bei Was-wäre-wenn gemeldet werden. Laden Sie eine Kopie der Bicep-Datei herunter.
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
name: 'vnet-001'
location: resourceGroup().location
tags: {
CostCenter: '12345'
Owner: 'Team A'
}
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
enableVmProtection: false
enableDdosProtection: false
subnets: [
{
name: 'subnet001'
properties: {
addressPrefix: '10.0.0.0/24'
}
}
{
name: 'subnet002'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Um die Bicep-Datei bereitzustellen, verwenden Sie:
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-before.bicep"
Testen der Änderung
Nach Abschluss der Bereitstellung, sind Sie bereit, um den Was-wäre-wenn-Vorgang zu testen. Diesmal stellen Sie eine Bicep-Datei zum Ändern des virtuellen Netzwerks bereit. Es fehlt eins der ursprünglichen Tags, ein Subnetz wurde entfernt, und das Adresspräfix wurde geändert. Laden Sie eine Kopie der Bicep-Datei herunter.
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
name: 'vnet-001'
location: resourceGroup().location
tags: {
CostCenter: '12345'
}
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/15'
]
}
enableVmProtection: false
enableDdosProtection: false
subnets: [
{
name: 'subnet002'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Um die Änderungen zu sehen, verwenden Sie:
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-after.bicep"
Die Was-wäre-wenn-Ausgabe ähnelt der folgenden:
Die Textausgabe lautet:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
+ properties.enableVmProtection: false
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Beachten Sie am Anfang der Ausgabe, dass Farben so definiert sind, dass der Typ der Änderungen angegeben wird.
Im unteren Bereich der Ausgabe wird angezeigt, dass das Tag „Owner“ gelöscht wurde. Das Adresspräfix wurde von 10.0.0.0/16 in 10.0.0.0/15 geändert. Das Subnetz mit dem Namen „subnet001“ wurde gelöscht. Beachten Sie, dass diese Änderungen nicht bereitgestellt wurden. Sie sehen eine Vorschau der Änderungen, die vorgenommen werden, wenn Sie die Bicep-Datei bereitstellen.
Einige der als gelöscht aufgeführten Eigenschaften werden sich tatsächlich nicht ändern. Eigenschaften können fälschlicherweise als gelöscht gemeldet werden, wenn sie nicht in der Bicep-Datei vorhanden sind, aber während der Bereitstellung automatisch als Standardwerte festgelegt werden. Dieses Ergebnis wird in der Was-wäre-wenn-Antwort als „Rauschen“ (Noise) betrachtet. Für die endgültige bereitgestellte Ressource werden die Werte der Eigenschaften festgelegt. Mit der fortschreitenden Entwicklung des Was-wäre-wenn-Vorgangs werden diese Eigenschaften aus dem Ergebnis herausgefiltert.
Programmgesteuertes Auswerten von Was-wäre-wenn-Ergebnissen
Nun können Sie die Was-wäre-wenn-Ergebnisse programmgesteuert auswerten, indem Sie den Befehl auf eine Variable festlegen.
$results = Get-AzResourceGroupDeploymentWhatIfResult `
-ResourceGroupName ExampleGroup `
--template-file "what-if-after.bicep"
Eine Zusammenfassung der einzelnen Änderungen wird angezeigt.
foreach ($change in $results.Changes)
{
$change.Delta
}
Löschvorgang bestätigen
Wenn Sie vor der Bereitstellung einer Bicep-Datei eine Vorschau der Änderungen anzeigen möchten, können Sie den Switch-Parameter „confirm“ mit dem Bereitstellungsbefehl verwenden. Wenn die Änderungen Ihren Erwartungen entsprechen, bestätigen Sie, dass Sie die Bereitstellung fertig stellen möchten.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Confirm `
-TemplateFile "what-if-after.bicep"
Die Textausgabe lautet:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
+ properties.enableVmProtection: false
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Are you sure you want to execute the deployment?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Die erwarteten Änderungen werden angezeigt, und Sie können bestätigen, dass die Bereitstellung ausgeführt werden soll.
Bereinigen von Ressourcen
Wenn Sie die Beispielressourcen nicht mehr benötigen, verwenden Sie Azure CLI oder Azure PowerShell, um die Ressourcengruppe zu löschen.
az group delete --name ExampleGroup
SDKs
Sie können den Was-wäre-wenn-Vorgang über die Azure-SDKs verwenden.
Verwenden Sie für Python Was-wäre-wenn-.
Verwenden Sie für Java die DeploymentWhatIf-Klasse.
Verwenden Sie für .NET die DeploymentWhatIf-Klasse.
Nächste Schritte
- Informationen zum Verwenden des Was-wäre-wenn-Vorgangs in einer Pipeline finden Sie unter Testen von ARM-Vorlagen mit Was-wäre-wenn-Vorgang in einer Pipeline.
- Wenn Sie falsche Ergebnisse von Was-wäre-wenn-Vorgängen bemerken, melden Sie die Probleme unter https://aka.ms/whatifissues.
- Ein Lernmodul, das die Verwendung von Was-wäre-wenn demonstriert, finden Sie unter Vorschau auf Änderungen und Validieren von Azure-Ressourcen mithilfe von Was-wäre-wenn und dem ARM-Vorlagentest-Toolkit.