Förutsäga vad en distribution kommer att göra med hjälp av vad händer om-analys
Alla som distribuerar eller ändrar resurser i en miljö har frågor som dessa i åtanke:
- Kommer jag att bryta något?
- Ska jag ta bort något?
- Hur påverkar den här 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 ingen bra strategi. En bättre metod är att använda vad händer om-operationen. Den här åtgärden hjälper dig att förutse konsekvenserna av en ny implementering om du genomför det.
Azure Resource Manager tillhandahåller den hypotetiska funktionen för att belysa ändringarna när du distribuerar en mall. "Vad händer om-operationen gör inga ändringar i befintliga resurser." I stället förutsäger den ändringarna om den angivna mallen distribueras på resursgrupps- och prenumerationsnivå.
Not
What-if-åtgärden visar ibland att en resurs kommer att ändras, när det i själva verket inte kommer att ske 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 vad-om-resultat
Cmdleten New-AzResourceGroupDeployment
Azure PowerShell 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 den.
Med kommandot az deployment group what-if
får du en förhandsversion av vad som händer om du utför en distribution.
Du kan kontrollera mängden textutdata från en Tänk om-åtgärd genom att använda något av följande resultatformat:
-
FullResourcePayloads
. Genom att inkludera den här parametern får du utförlig 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 över resurser som kommer att ändras, men inte all information.
Anta till exempel att du ändrar lagringstypen i en mall som distribuerar ett enda lagringskonto till 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 vad händer om-operationen visas sex typer av ändringar.
Typ | Förklaring | Effekt |
---|---|---|
Skapa | Resursen finns för närvarande inte men definieras 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 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 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 om, men resursens egenskaper ändras inte. Den här ändringstypen returneras när resultatformatet är inställt på FullResourcePayloads , vilket är standardresultatformatet. |
Modifiera | Resursen finns och definieras i mallen. | Resursen distribueras om och resursens egenskaper ändras. Den här ändringstypen returneras när resultatformatet är inställt på FullResourcePayloads , vilket är standardresultatformatet. |
Gruppera | Resursen finns och definieras i mallen. | Resursen kommer att distribueras om. Egenskaperna för resursen kanske eller kanske inte ändras. Åtgärden returnerar den här ändringstypen när den inte har 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 resultatformatet är inställt på ResourceIdOnly . |
Om du inte behöver känna till alla ändringstyper kan du använda argumentet -WhatIfExcludeChangeType
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 argumentet --what-if-exclude-change-types
för att utelämna de typer som du inte är intresserad av.
Använda hypotetiska resultat 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 --no-pretty-print
till 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. I detta syfte tar vad-om-analysen hänsyn till det distributionsläge som du använder. Om du använder fullständigt distributionsläge 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 värdet på taggenowner
ändras till Team A-. Simuleringsresultatet visar en Modifiera ändringstyp för denna resurs. - Mallen skapar ett nytt Azure Cosmos DB-konto med namnet
cosmos-db-1
, som inte finns i resursgruppen ännu. What-if-utdata 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 what-if-resultatet en Ta bort ä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 som förväntat bekräftar du att du vill att distributionen ska slutföras.
Tips
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
kan du 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 argumentet --confirm-with-what-if
med distributionskommandot. Om ändringarna är som förväntat bekräftar du att du vill att distributionen ska slutföras.
Tips
Det är en bra idé att köra dina distributionskommandon med argumentet --confirm-with-what-if
, särskilt om du distribuerar i fullständigt läge. Om du använder växeln --confirm-with-what-if
kan du stoppa åtgärden om du inte gillar de föreslagna ändringarna.