Förutsäga vad en distribution gör med konsekvensgranskning
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:
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 taggenowner
ä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.