Vad om-åtgärd för Bicep-distribution

Innan du distribuerar en Bicep-fil 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 Bicep-filen. Konsekvensgranskningen ändrar inga befintliga resurser. I stället förutsäger den ändringarna om den angivna Bicep-filen distribueras.

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 om-åtgärden 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-modulen

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.

Bicep distributionsåtgärd fullresourcepayload och ändringstyper

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 inträffar eftersom vad om jämför det aktuella värdet för egenskapen (till exempel eller för ett booleskt värde) med det olösta true false malluttrycket. Dessa värden kommer naturligtvis inte att matcha. När du distribuerar Bicep-filen ä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 Bicep-fil 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 Bicep-fil använder du:

Du kan använda --confirm-with-what-if växeln (eller dess kortform ) för -c att 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 definieras i Bicep-filen. Resursen skapas.
  • Ta bort: Den här ändringstypen gäller endast när du använder fullständigt läge för JSON-malldistribution. Resursen finns, men är inte definierad i Bicep-filen. 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 Bicep-filen. Resursen kommer inte att distribueras eller ändras.
  • NoChange: Resursen finns och definieras i Bicep-filen. Resursen distribueras på nytt, men egenskaperna ändras inte. Den här ändringstypen returneras när ResultFormat är inställt FullResourcePayloads på , vilket är standardvärdet.
  • Ändra: Resursen finns och definieras i Bicep-filen. Resursen distribueras på nytt och resursens egenskaper ändras. Den här ändringstypen returneras när ResultFormat är inställt FullResourcePayloads på , vilket är standardvärdet.
  • Distribuera: Resursen finns och definieras i Bicep-filen. 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 är inställt på 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 . Använd parametern i programmatiska ResultFormat objektkommandon.

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 vad om fungerar kör vi några tester. Distribuera först en Bicep-fil 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. Ladda ned en kopia av Bicep-filen.

resource vnet 'Microsoft.Network/virtualNetworks@2021-02-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'
        }
      }
    ]
  }
}

Om du vill distribuera Bicep-filen använder du:

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile "what-if-before.bicep"

Testa ändring

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

resource vnet 'Microsoft.Network/virtualNetworks@2021-02-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'
        }
      }
    ]
  }
}

Om du vill visa ändringarna använder du:

New-AzResourceGroupDeployment `
  -Whatif `
  -ResourceGroupName ExampleGroup `
  -TemplateFile "what-if-after.bicep"

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

Bicep-distributionsutdata för vad om-å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.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.

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 Bicep-filen.

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 Bicep-filen, men ställs automatiskt in under distributionen som standardvärden. Det här resultatet betraktas som "brus" i svaret "vad om". 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 `
  --template-file "what-if-after.bicep"

Du kan se en sammanfattning av varje ändring.

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

Bekräfta borttagning

Om du vill förhandsgranska ändringar innan du distribuerar en Bicep-fil använder du växelparametern confirm med distributionskommandot. Om ändringarna är som förväntat svarar du att du vill att distributionen ska slutföras.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Confirm `
  -TemplateFile "what-if-after.bicep"

Distributionsutdatadistributionsläget för Bicep-distributionen är klart

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

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

Rensa resurser

När du inte längre behöver exempelresurserna kan du använda Azure CLI eller Azure PowerShell för att ta bort resursgruppen.

az group delete --name ExampleGroup

SDK:er

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

Nästa steg