Vorhersagen der Auswirkungen einer Bereitstellung mithilfe des Was-wäre-wenn-Vorgangs

Abgeschlossen

Jede Person, die Ressourcen in einer Umgebung bereitstellt oder ändert, hat Fragen wie diese:

  • Werde ich etwas kaputt machen?
  • Werden Daten oder Ressourcen gelöscht?
  • Wie wirkt sich diese Bereitstellung auf vorhandene Ressourcen aus?
  • Kann ich vor der Bereitstellung überprüfen, ob bei der Bereitstellung tatsächlich die erwarteten Schritte ausgeführt werden?

Bereitstellen und auf das Beste hoffen ist kein guter Ansatz. Deutlich besser eignet sich der Was-wäre-wenn-Vorgang. Er ermöglicht es Ihnen vorherzusagen, welche Konsequenzen eine neue Bereitstellung nach sich zieht, würde sie versucht werden.

In Azure Resource Manager ist der Was-wäre-wenn-Vorgang zum Hervorheben der Änderungen beim Bereitstellen einer Vorlage verfügbar. Der Was-wäre-wenn-Vorgang nimmt keine Änderungen an vorhandenen Ressourcen vor. Stattdessen werden die Änderungen vorhergesagt, die vorgenommen werden würden, wenn die angegebene Vorlage auf Ebene einer Ressourcengruppe und eines Abonnements bereitgestellt wird.

Hinweis

Der Was-wäre-wenn-Vorgang zeigt mitunter eine Ressourcenänderung an, obwohl eigentlich keine Änderung vorgenommen wird. Wir arbeiten an der Behebung dieses Problems, benötigen dazu jedoch Ihre Unterstützung. Hier können Sie diese Art von Problemen melden.

Bei Verwendung des Was-wäre-wenn-Vorgangs wird der aktuelle Zustand mit dem gewünschten Zustand des Modells verglichen. Der Was-wäre-wenn-Vorgang überprüft, ob die von Ihrer Vorlage vorgenommenen Änderungen Ihren Erwartungen entsprechen, ohne diese Änderungen auf echte Ressourcen oder ihren Zustand anzuwenden.

Festlegen des Formats von Was-wäre-wenn-Ergebnissen

Das Azure PowerShell-Cmdlet New-AzResourceGroupDeployment erstellt eine neue Bereitstellung in einer Ressourcengruppe. Indem Sie den -Whatif-Parameter zu diesem Befehl hinzufügen, führt der Befehl nicht die Bereitstellung aus, sondern erstellt lediglich eine Vorschau dessen, was bei einer Bereitstellung passieren würde.

Mit dem Befehl az deployment group what-if erhalten Sie eine Vorschau dessen, was bei einer Bereitstellung passieren würde.

Sie können den Umfang der Textausgabe des Was-wäre-wenn-Vorgangs mit einem dieser Ergebnisformate steuern:

  • FullResourcePayloads. Durch Einbinden dieses Parameters erhalten Sie eine ausführliche Ausgabe, die aus einer Liste von Ressourcen besteht, die sich ändern werden. Die Ausgabe zeigt auch Details zu allen Eigenschaften an, die in Übereinstimmung mit der Vorlage geändert werden.
  • ResourceIdOnly. In diesem Modus wird eine Liste der Ressourcen zurückgegeben, die sich ändern werden, jedoch nicht alle Details.

Angenommen, Sie ändern beispielsweise den Speichertyp in einer Vorlage, die ein einzelnes Speicherkonto in einer vorhandenen Umgebung bereitstellt.

Sie können den folgenden PowerShell-Code ausführen und die vollständigen Ressourcennutzdaten von Resource Manager ausgeben lassen:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format FullResourcePayloads

Mit dem vorherigen Befehl werden die folgenden Ergebnisse ausgegeben:

Resource and property changes are indicated with this symbol:
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
    ~ sku.name: "Standard_LRS" => "Standard_GRS"

Resource changes: 1 to modify.

Anschließend können Sie den Befehl nochmal ausführen und dabei lediglich die Ressourcen-IDs abfragen:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format ResourceIdOnly

Mit dem vorherigen Befehl werden die folgenden Ergebnisse ausgegeben:

Resource and property changes are indicated with this symbol:
  ! Deploy

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Änderungstypen, die vom Was-wäre-wenn-Vorgang erkannt werden

Wenn Sie den Was-wäre-wenn-Vorgang verwenden, werden sechs Typen von Änderungen aufgelistet:

type Erklärung Wirkung
Erstellen Die Ressource ist zurzeit nicht vorhanden, aber in der Vorlage definiert. Die Ressource wird erstellt.
Löschen Dieser Änderungstyp gilt nur, wenn der Modus Vollständig für die Bereitstellung verwendet wird. Die Ressource ist vorhanden, aber nicht in der Vorlage definiert. Wenn Sie die Bereitstellung im inkrementellen Modus durchführen, wird die Ressource nicht gelöscht. Wenn Sie die Bereitstellung im vollständigen Modus durchführen, wird die Ressource gelöscht. Dieser Änderungstyp wird nur für Ressourcen zurückgegeben, die das Löschen über den vollständigen Modus unterstützen.
Ignorieren Die Ressource ist vorhanden, aber nicht in der Vorlage definiert. Wenn Sie den inkrementellen Modus verwenden, bei dem es sich um den Standardbereitstellungsmodus handelt, wird die Ressource nicht bereitgestellt oder geändert. Wenn Sie die Bereitstellung im vollständigen Modus durchführen, wird die Ressource gelöscht.
„NoChange“ (Keine Änderung) Die Ressource ist vorhanden und in der Vorlage definiert. Die Ressource wird erneut bereitgestellt, wobei sich die Eigenschaften der Ressource aber nicht ändern. Dieser Änderungstyp wird zurückgegeben, wenn das Ergebnisformat auf das Standardergebnisformat FullResourcePayloads festgelegt ist.
Ändern Die Ressource ist vorhanden und in der Vorlage definiert. Die Ressource wird erneut bereitgestellt, und die Eigenschaften der Ressource ändern sich. Dieser Änderungstyp wird zurückgegeben, wenn das Ergebnisformat auf das Standardergebnisformat FullResourcePayloads festgelegt ist.
Bereitstellen Die Ressource ist vorhanden und in der Vorlage 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 das Ergebnisformat auf ResourceIdOnly festgelegt ist.

Wenn Sie nicht alle Änderungstypen abrufen müssen, können Sie das Argument -WhatIfExcludeChangeType verwenden, um die für Sie irrelevanten Typen auszulassen.

Wenn Sie nicht alle Änderungstypen abrufen müssen, können Sie das Argument --what-if-exclude-change-types verwenden, um die für Sie irrelevanten Typen auszulassen.

Verwenden von Was-wäre-wenn-Ergebnissen in einem Skript

Möglicherweise möchten Sie die Ausgabe des Was-wäre-wenn-Vorgangs in einem Skript oder als Teil eines automatisierten Bereitstellungsprozesses verwenden.

Sie können die Ergebnisse mithilfe des Cmdlets Get-AzResourceGroupDeploymentWhatIfResult abrufen. Anschließend kann Ihr Skript die Ergebnisse analysieren und eine beliebige benutzerdefinierte Logik ausführen.

Sie können die unformatierten JSON-Ergebnisse abrufen, indem Sie das Argument --no-pretty-print an Ihren CLI-Befehl anfügen. Anschließend kann Ihr Skript die Ergebnisse analysieren und eine beliebige benutzerdefinierte Logik ausführen.

Bereitstellungsmodi und Löschen von Ressourcen

In bestimmten Situationen kann es erforderlich oder sinnvoll sein, das Löschen von Ressourcen bei der Vorlagenbereitstellung zu überprüfen. Zu diesem Zweck berücksichtigt der Was-wäre-wenn-Vorgang den verwendeten Bereitstellungsmodus. Bei Verwendung des vollständigen Bereitstellungsmodus gibt Resource Manager an, welche Ressourcen gelöscht werden, weil sie nicht in Ihrer Bereitstellung definiert sind.

Sehen wir uns ein Beispiel für eine Vorlage an, mit der eine vorhandene Ressource aktualisiert und im vollständigen Modus bereitgestellt wird:

Diagram showing change types for three resources, some of which already exist.

Im Folgenden wird erläutert, was in diesem Beispiel geschieht:

  • Die Vorlage aktualisiert das Speicherkonto storage-1, das bereits bereitgestellt wurde. Die SKU wechselt von LRS zu GRS und das owner-Tag ändert seinen Wert in Team A. In der Was-wäre-wenn-Ausgabe wird der Änderungstyp Modifizieren für diese Ressource angezeigt.
  • Die Vorlage erstellt ein neues Azure Cosmos DB-Konto cosmos-db-1, das noch nicht in der Ressourcengruppe vorhanden ist. In der Was-wäre-wenn-Ausgabe wird der Änderungstyp Create (Erstellen) für diese Ressource angezeigt.
  • Der logische Azure SQL-Server, der bereits in der Ressourcengruppe vorhanden ist, ist in der Vorlage nicht enthalten. Da der vollständige Bereitstellungsmodus verwendet wird, wird in der Was-wäre-wenn-Ausgabe der Änderungstyp Delete (Löschen) für diese Ressource angezeigt. Würde anstelle des vollständigen Modus der inkrementelle Modus verwendet, würde der Änderungstyp stattdessen Ignore (Ignorieren) lauten.

Bestätigen Ihrer Bereitstellungen

Verwenden Sie den Parameter -Confirm mit dem Bereitstellungsbefehl, um vor der Bereitstellung einer Vorlage eine Vorschau der Änderungen anzuzeigen. Wenn die Änderungen Ihren Erwartungen entsprechen, bestätigen Sie, dass Sie die Bereitstellung fertig stellen möchten.

Tipp

Es empfiehlt sich, Ihre Bereitstellungsbefehle mit der Option -Confirm auszuführen. Dies gilt insbesondere dann, wenn Sie die Bereitstellung im vollständigen Modus durchführen. Bei Verwendung der Option -Confirm haben Sie die Möglichkeit, den Vorgang anzuhalten, wenn die vorgeschlagenen Änderungen nicht Ihren Erwartungen entsprechen.

Verwenden Sie das Argument --confirm-with-what-if mit dem Bereitstellungsbefehl, um vor der Bereitstellung einer Vorlage eine Vorschau der Änderungen anzuzeigen. Wenn die Änderungen Ihren Erwartungen entsprechen, bestätigen Sie, dass Sie die Bereitstellung fertig stellen möchten.

Tipp

Es empfiehlt sich, Ihre Bereitstellungsbefehle mit dem Argument --confirm-with-what-if auszuführen. Dies gilt insbesondere dann, wenn Sie die Bereitstellung im vollständigen Modus durchführen. Bei Verwendung der Option --confirm-with-what-if haben Sie die Möglichkeit, den Vorgang anzuhalten, wenn die vorgeschlagenen Änderungen nicht Ihren Erwartungen entsprechen.