Förutsäga vad en distribution gör med konsekvensgranskning

Slutförd

Alla som distribuerar eller ändrar resurser i en miljö har frågor som dessa i åtanke:

  • Kommer någonting att gå sönder?
  • Ska jag ta bort något?
  • Hur påverkar distributionen befintliga resurser?
  • Kan jag verifiera att det jag förväntar mig ska hända är vad som kommer att hända i distributionen innan jag trycker på distributionsknappen?

Att distribuera och hoppas på det bästa är inte en bra metod. Det är bättre att använda konsekvensgranskning. Den här åtgärden hjälper dig att förutse konsekvenserna av en ny distribution om du försöker.

Kommandot what-if finns i Azure Resource Manager så att du kan se vilka ändringar som sker när du distribuerar en mall. Konsekvensgranskningen ändrar inga befintliga resurser. Den gör att du ser vilka ändringar som sker när du distribuerar mallen på resursgrupps- och prenumerationsnivå.

Kommentar

Konsekvensåtgärden visar ibland att en resurs ändras när det faktiskt inte sker någon ändring. Vi arbetar för att minska dessa problem, men vi behöver din hjälp. Rapportera dessa problem.

Med hjälp av konsekvensåtgärden jämförs den aktuella tillståndsmodellen med önskad tillståndsmodell. Konsekvensåtgärden bekräftar om ändringarna i mallen matchar dina förväntningar utan att tillämpa ändringarna på verkliga resurser eller på resursernas tillstånd.

Kontrollera formatet för konsekvensresultat

New-AzResourceGroupDeployment Azure PowerShell-cmdleten skapar en ny distribution till en resursgrupp. När du lägger till parametern -Whatif i det här kommandot växlar kommandot från att utföra distributionen till att bara rapportera en förhandsversion av vad som händer om du utför det.

Kommandot az deployment group what-if ger dig en förhandsversion av vad som händer om du utför en distribution.

Du kan styra mängden textutdata för konsekvensåtgärden med något av följande resultatformat:

  • FullResourcePayloads. Genom att inkludera den här parametern får du utförliga utdata som består av en lista över resurser som kommer att ändras. Utdata visar också information om alla egenskaper som kommer att ändras i enlighet med mallen.
  • ResourceIdOnly. Det här läget returnerar en lista med resurser som kommer att ändras, men inte all information.

Vi antar till exempel att du ändrar lagringstyp i en mall som distribuerar ett enda lagringskonto i en befintlig miljö.

Du kan köra följande PowerShell-kod och be Resource Manager att ge dig alla resursnyttolaster:

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

Föregående kommando ger följande resultat:

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

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

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

Resource changes: 1 to modify.

Sedan kan du köra kommandot igen men bara be om resurs-ID:t:

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

Föregående kommando ger följande resultat:

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

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Typer av ändringar som what-if identifierar

När du använder konsekvensgranskning listas sex typer av ändringar:

Typ Förklaring Effekt
Skapa Resursen finns inte för närvarande men definieras i mallen. Resursen skapas.
Delete Den här ändringstypen gäller bara vid distribution i fullständigt läge. Resursen finns, men den definieras inte i mallen. Om du distribuerar med inkrementellt läge tas inte resursen bort. Om du distribuerar med fullständigt läge tas resursen bort. Den här ändringstypen returneras endast för resurser som stöder borttagning via fullständigt läge.
Ignorera Resursen finns, men den definieras inte i mallen. När du använder inkrementellt läge, vilket är standarddistributionsläget, distribueras eller ändras inte resursen. Om du distribuerar med fullständigt läge tas resursen bort.
NoChange Resursen finns och definieras i mallen. Resursen distribueras på nytt, men egenskaperna ändras inte. Den här ändringstypen returneras när resultatformatet är inställt på FullResourcePayloads, vilket är standardresultatformatet.
Ändra Resursen finns och definieras i mallen. Resursen distribueras på nytt och resursens egenskaper ändras. Den här ändringstypen returneras när resultatformatet är inställt på FullResourcePayloads, vilket är standardresultatformatet.
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. Det här villkoret visas bara när resultatformatet är inställt på ResourceIdOnly.

Om du inte behöver känna till alla ändringstyper kan du använda -WhatIfExcludeChangeType argumentet för att utelämna de typer som du inte är intresserad av.

Om du inte behöver känna till alla ändringstyper kan du använda --what-if-exclude-change-types argumentet för att utelämna de typer som du inte är intresserad av.

Använda konsekvensresultat i ett skript

Du kanske vill använda utdata från konsekvensåtgärden i ett skript eller som en del av en automatiserad distributionsprocess.

Du kan hämta resultaten med hjälp av cmdleten Get-AzResourceGroupDeploymentWhatIfResult . Sedan kan skriptet parsa resultaten och utföra den anpassade logik som du kan behöva.

Du kan hämta JSON-råresultatet genom att lägga till argumentet i --no-pretty-print CLI-kommandot. Sedan kan skriptet parsa resultaten och utföra den anpassade logik som du kan behöva.

Distributionslägen och borttagning av resurser

Det finns tillfällen då du vill bekräfta borttagningen av resurser när du distribuerar mallen. Därför står konsekvensåtgärden för det distributionsläge som du använder. Om du använder det fullständiga distributionsläget rapporterar Resource Manager de resurser som tas bort eftersom de inte har definierats i distributionen.

Nu ska vi titta på ett exempel på en mall som uppdaterar en befintlig resurs och distribueras i fullständigt läge:

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

Här är en förklaring av vad som händer i det här exemplet:

  • Mallen uppdaterar ett lagringskonto med namnet storage-1, som redan har distribuerats. SKU:n ändras från LRS till GRS och taggen owner ändrar värde till Team A. Konsekvensutdata visar ändringstypen Ändra för den här resursen.
  • Mallen skapar ett nytt Azure Cosmos DB-konto med namnet cosmos-db-1, som inte finns i resursgruppen ännu. Konsekvensutdata visar en Skapa ändringstyp för den här resursen.
  • Mallen innehåller inte den logiska Azure SQL-server som redan finns i resursgruppen. Eftersom distributionen använder fullständigt läge visar konsekvensutdata en Borttagningsändringstyp för den här resursen. Om distributionen använde inkrementellt läge i stället för fullständigt läge skulle ändringstypen vara Ignorera i stället.

Bekräfta dina distributioner

Om du vill förhandsgranska ändringar innan du distribuerar en mall använder du parametern -Confirm med distributionskommandot. Om ändringarna är de du förväntar dig bekräftar du att du vill utföra distributionen.

Dricks

Det är en bra idé att köra dina distributionskommandon med växeln -Confirm , särskilt om du distribuerar i fullständigt läge. Om du använder växeln -Confirm har du en chans att stoppa åtgärden om du inte gillar de föreslagna ändringarna.

Om du vill förhandsgranska ändringar innan du distribuerar en mall använder du --confirm-with-what-if argumentet med distributionskommandot. Om ändringarna är de du förväntar dig bekräftar du att du vill utföra distributionen.

Dricks

Det är en bra idé att köra dina distributionskommandon med --confirm-with-what-if argumentet, särskilt om du distribuerar i fullständigt läge. Om du använder växeln --confirm-with-what-if har du en chans att stoppa åtgärden om du inte gillar de föreslagna ändringarna.