Åtgärden what-if för distribution av ARM-mall

Innan du distribuerar Azure Resource Manager mall (ARM-mall) kan du förhandsgranska de ändringar som kommer att ske. Azure Resource Manager innehåller vad om-åtgärden så att du kan se hur resurser kommer att ändras om du distribuerar mallen. Konsekvensgranskningen ändrar inga befintliga resurser. I stället får du se vilka ändringar som görs om du distribuerar den angivna mallen.

Du kan använda vad om-åtgärden med Azure PowerShell, Azure CLI eller REST API åtgärder. What-if stöds för distributioner på resursgrupps-, prenumerations-, hanteringsgrupps- och klientorganisationsnivå.

Microsoft Learn

Mer information om vad och praktisk vägledning finns i Förhandsgranska ändringar i Azure-distributionen med hjälp av vad om på Microsoft Learn.

Installera Azure PowerShell modul

Om du vill använda Vad om i PowerShell måste du ha version 4.2 eller senare av Az-modulen.

Om du vill installera modulen använder du:

Install-Module -Name Az -Force

Mer information om hur du installerar moduler finns i Installera Azure PowerShell.

Installera Azure CLI-modul

Om du vill använda Vad om i Azure CLI måste du ha Azure CLI 2.14.0 eller senare. Installera den senaste versionen av Azure CLI om det behövs.

Visa resultat

När du använder Vad om i PowerShell eller Azure CLI innehåller utdata färgkodade resultat som hjälper dig att se de olika typerna av ändringar.

Resource Manager distributionsåtgärd fullresourcepayload och ändra typer

Textutdata är:

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.

Anteckning

Vad om-åtgärden kan inte matcha referensfunktionen. Varje gång du ställer in en egenskap till ett malluttryck som innehåller referensfunktionen ändras vad om rapporterar egenskapen. Det här beteendet beror på vad som händer om jämför det aktuella värdet för egenskapen (till exempel eller för ett booleskt värde) med det true false olösta malluttrycket. Dessa värden kommer naturligtvis inte att matcha. När du distribuerar mallen ändras egenskapen endast när malluttrycket matchas till ett annat värde.

What-if-kommandon

Azure PowerShell

Om du vill förhandsgranska ändringar innan du distribuerar en mall använder du New-AzResourceGroupDeployment eller New-AzSubscriptionDeployment. Lägg till -Whatif växlingsparametern i distributionskommandot.

  • New-AzResourceGroupDeployment -Whatif för distributioner av resursgrupper
  • New-AzSubscriptionDeployment -Whatif och New-AzDeployment -Whatif för distributioner på prenumerationsnivå

Du kan använda -Confirm växlingsparametern för att förhandsgranska ändringarna och uppmanas att fortsätta med distributionen.

  • New-AzResourceGroupDeployment -Confirm för distributioner av resursgrupper
  • New-AzSubscriptionDeployment -Confirm och New-AzDeployment -Confirm för distributioner på prenumerationsnivå

Föregående kommandon returnerar en textsammanfattning som du kan granska manuellt. Om du vill hämta ett objekt som du kan kontrollera programmässigt för ändringar använder du Get-AzResourceGroupDeploymentWhatIfResult eller Get-AzSubscriptionDeploymentWhatIfResult.

  • $results = Get-AzResourceGroupDeploymentWhatIfResult för distributioner av resursgrupper
  • $results = Get-AzSubscriptionDeploymentWhatIfResult eller $results = Get-AzDeploymentWhatIfResult för distributioner på prenumerationsnivå

Azure CLI

Om du vill förhandsgranska ändringar innan du distribuerar en mall använder du:

Du kan använda växeln (eller dess korta form ) för att --confirm-with-what-if -c förhandsgranska ändringarna och uppmanas att fortsätta med distributionen. Lägg till den här växeln i:

Du kan till exempel az deployment group create --confirm-with-what-if använda -c eller för distributioner av resursgrupper.

Föregående kommandon returnerar en textsammanfattning som du kan granska manuellt. Om du vill hämta ett JSON-objekt som du kan kontrollera programmatiskt för ändringar använder du --no-pretty-print växeln . Använd till exempel az deployment group what-if --no-pretty-print för resursgruppsdistributioner.

Om du vill returnera resultatet utan färger öppnar du Azure CLI-konfigurationsfilen. Ange no_color till ja.

REST-API för Azure

För REST API använder du:

Ändringstyper

Vad om-åtgärden visar sex olika typer av ändringar:

  • Skapa: Resursen finns inte för närvarande men har definierats i mallen. Resursen skapas.

  • Ta bort: Den här ändringstypen gäller endast när du använder fullständigt läge för distribution. Resursen finns, men den definieras inte i mallen. I fullständigt läge tas resursen bort. Endast resurser som stöder borttagning i fullständigt läge ingår i den här ändringstypen.

  • Ignorera: Resursen finns, men har inte definierats i mallen. Resursen kommer inte att distribueras eller ändras.

  • NoChange: Resursen finns och definieras i mallen. Resursen distribueras på nytt, men egenskaperna ändras inte. Den här ändringstypen returneras när ResultFormat har FullResourcePayloads angetts till , vilket är standardvärdet.

  • Ändra: Resursen finns och definieras i mallen. Resursen distribueras på nytt och resursens egenskaper ändras. Den här ändringstypen returneras när ResultFormat har FullResourcePayloads angetts till , vilket är standardvärdet.

  • Distribuera: Resursen finns och definieras i mallen. Resursen distribueras på nytt. Egenskaperna för resursen ändras eventuellt. Åtgärden returnerar den här ändringstypen när det inte finns tillräckligt med information för att avgöra om några egenskaper kommer att ändras. Du ser bara det här villkoret när ResultFormat har angetts till ResourceIdOnly .

Resultatformat

Du styr detaljnivån som returneras om de förutsagda ändringarna. Du kan välja mellan två alternativ:

  • FullResourcePayloads – returnerar en lista över resurser som kommer att ändras och information om de egenskaper som kommer att ändras
  • ResourceIdOnly – returnerar en lista över resurser som kommer att ändras

Standardvärdet är FullResourcePayloads.

För PowerShell-distributionskommandon använder du -WhatIfResultFormat parametern . I programmatiska objektkommandon använder du ResultFormat parametern .

För Azure CLI använder du --result-format parametern .

Följande resultat visar de två olika utdataformaten:

  • Fullständiga resursnyttolaster

    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.
    
  • Endast resurs-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.
    

Köra vad om-åtgärd

Konfigurera miljö

För att se hur what-if fungerar kör vi några tester. Distribuera först en mall som skapar ett virtuellt nätverk. Du använder det här virtuella nätverket för att testa hur ändringar rapporteras av vad om.

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"

Testa ändring

När distributionen är klar är du redo att testa vad om-åtgärden. Den här gången distribuerar du en mall som ändrar det virtuella nätverket. Det saknas en av de ursprungliga taggarna, ett undernät har tagits bort och adressprefixet har ändrats.

New-AzResourceGroupDeployment `
  -Whatif `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

Utdata från konsekvensgranskningen bör se ut ungefär så här:

Resource Manager utdata för malldistributionsåtgärd

Textutdata är:

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.

Observera att färger definieras överst i utdata för att ange typen av ändringar.

Längst ned i utdata visas taggen Ägare har tagits bort. Adressprefixet ändrades från 10.0.0.0/16 till 10.0.0.0/15. Undernätet med namnet subnet001 har tagits bort. Kom ihåg att dessa ändringar inte har distribuerats. Du ser en förhandsgranskning av de ändringar som kommer att ske om du distribuerar mallen.

Vissa av de egenskaper som visas som borttagna ändras inte i själva verket. Egenskaper kan felaktigt rapporteras som borttagna när de inte finns i mallen, men ställs automatiskt in under distributionen som standardvärden. Det här resultatet betraktas som "brus" i "vad om"-svaret. Den slutliga distribuerade resursen har värdena inställda för egenskaperna. När vad om-åtgärden mognar filtreras dessa egenskaper bort från resultatet.

Utvärdera vad om-resultat programmässigt

Nu ska vi programmatiskt utvärdera vad om-resultatet genom att ange kommandot till en variabel.

$results = Get-AzResourceGroupDeploymentWhatIfResult `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

Du kan se en sammanfattning av varje ändring.

foreach ($change in $results.Changes)
{
  $change.Delta
}

Bekräfta borttagning

Vad om-åtgärden stöder användning av distributionsläget. När det här är inställt på slutfört läge tas resurser som inte finns i mallen bort. I följande exempel distribueras en mall som inte har några resurser definierade i fullständigt läge.

Om du vill förhandsgranska ändringarna innan du distribuerar en mall använder du parametern confirm switch (bekräfta ändring) i distributionskommandot. Om ändringarna är som förväntat svarar du att du vill att distributionen ska slutföras.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Mode Complete `
  -Confirm `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"

Eftersom inga resurser har definierats i mallen och distributionsläget är inställt på att slutföras tas det virtuella nätverket bort.

Resource Manager distributionen av vad om-åtgärdens utdatadistributionsläge är klart

Textutdata är:

Resource and property changes are indicated with this symbol:
  - Delete

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  - Microsoft.Network/virtualNetworks/vnet-001

      id:
"/subscriptions/./resourceGroups/ExampleGroup/providers/Microsoft.Network/virtualNet
works/vnet-001"
      location:        "centralus"
      name:            "vnet-001"
      tags.CostCenter: "12345"
      tags.Owner:      "Team A"
      type:            "Microsoft.Network/virtualNetworks"

Resource changes: 1 to delete.

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"):

Du ser de förväntade ändringarna och kan bekräfta att du vill att distributionen ska köras.

SDK:er

Du kan använda vad om-åtgärden via Azure-SDK:erna.

Nästa steg