Met wat-als voorspellen wat een implementatie doet

Voltooid

Iedereen die resources in een omgeving implementeert of wijzigt, heeft vragen zoals deze:

  • Ga ik iets kapotmaken?
  • Ga ik iets verwijderen?
  • Wat is de invloed van deze implementatie op bestaande resources?
  • Kan ik controleren of wat ik verwacht te gebeuren eigenlijk is wat er gebeurt in de implementatie, voordat ik op de knop Implementeren klik?

Implementeren en hopen op het beste is geen goede aanpak. Het is beter om de wat-als-bewerking te gebruiken. Met deze bewerking kunt u anticiperen op de gevolgen van een nieuwe implementatie, als u dit probeert.

Azure Resource Manager biedt de wat-als-bewerking om aan te tonen welke wijzigingen worden doorgevoerd bij het implementeren van een sjabloon. Met de 'wat-als'-bewerking worden er geen wijzigingen doorgevoerd voor bestaande resources. In plaats daarvan wordt een voorspelling gedaan van de wijzigingen als een specifieke sjabloon op abonnementsniveau wordt geïmplementeerd in een resourcegroep.

Notitie

De wat-als-bewerking laat soms zien dat een resource wordt gewijzigd wanneer er daadwerkelijk geen wijziging plaatsvindt. We proberen deze problemen te verminderen, maar we hebben uw hulp nodig. Meld deze problemen aan.

Met behulp van de wat-als-bewerking wordt het huidige statusmodel vergeleken met het gewenste statusmodel. De wat-als-bewerking bevestigt of de wijzigingen die door uw sjabloon zijn aangebracht, overeenkomen met uw verwachtingen zonder deze wijzigingen toe te passen op echte resources of op de status van deze resources.

De indeling van wat-als-resultaten beheren

Met de New-AzResourceGroupDeployment Azure PowerShell-cmdlet maakt u een nieuwe implementatie voor een resourcegroep. Wanneer u de -Whatif parameter aan deze opdracht toevoegt, schakelt de opdracht over van het uitvoeren van de implementatie tot het rapporteren van een voorbeeld van wat er gebeurt als u deze uitvoert.

Met de az deployment group what-if opdracht krijgt u een voorbeeld van wat er gebeurt als u een implementatie uitvoert.

U kunt de hoeveelheid tekstuitvoer van de wat-als-bewerking beheren met behulp van een van deze resultaatindelingen:

  • FullResourcePayloads. Door deze parameter op te nemen, krijgt u een uitgebreide uitvoer die bestaat uit een lijst met resources die worden gewijzigd. De uitvoer bevat ook details over alle eigenschappen die gewijzigd worden overeenkomstig de sjabloon.
  • ResourceIdOnly. Deze modus retourneert een lijst met resources die worden gewijzigd, maar niet alle gegevens.

Stel dat u het opslagtype wijzigt in een sjabloon waarmee één opslagaccount wordt geïmplementeerd in een bestaande omgeving.

U kunt de volgende PowerShell-code uitvoeren en Resource Manager vragen om u de volledige nettoladingen van resources te geven:

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

De voorgaande opdracht produceert de volgende resultaten:

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

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

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

Resource changes: 1 to modify.

U kunt vervolgens de opdracht opnieuw uitvoeren, maar gewoon om de resource-id's vragen:

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

De voorgaande opdracht produceert de volgende resultaten:

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

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Typen wijzigingen die wat-als detecteert

Wanneer u de wat-als-bewerking gebruikt, ziet u zes soorten wijzigingen:

Type Uitleg Effect
Create De resource bestaat op dit moment niet, maar wordt in de sjabloon verder gedefinieerd. De resource wordt gemaakt.
Delete Dit wijzigingstype is alleen van toepassing wanneer u de volledige modus voor de implementatie gebruikt. De resource bestaat, maar wordt niet gedefinieerd in de sjabloon. Als u implementeert met behulp van de incrementele modus, wordt de resource niet verwijderd. Als u implementeert met behulp van de volledige modus, wordt de resource verwijderd. Dit wijzigingstype wordt alleen geretourneerd voor resources die ondersteuning bieden voor verwijdering via de volledige modus.
Negeren De resource bestaat, maar wordt niet gedefinieerd in de sjabloon. Wanneer u de incrementele modus gebruikt, de standaardimplementatiemodus, wordt de resource niet geïmplementeerd of gewijzigd. Als u implementeert met behulp van de volledige modus, wordt de resource verwijderd.
NoChange De resource bestaat en wordt gedefinieerd in de sjabloon. De resource wordt opnieuw geïmplementeerd, maar de eigenschappen van de resource worden niet gewijzigd. Dit wijzigingstype wordt geretourneerd wanneer de resultaatindeling is ingesteld op FullResourcePayloads, wat de standaardresultaatindeling is.
Wijzigen De resource bestaat en wordt gedefinieerd in de sjabloon. De resource wordt opnieuw geïmplementeerd en de eigenschappen van de resource worden gewijzigd. Dit wijzigingstype wordt geretourneerd wanneer de resultaatindeling is ingesteld op FullResourcePayloads, wat de standaardresultaatindeling is.
Implementeren De resource bestaat en wordt gedefinieerd in de sjabloon. De resource wordt opnieuw geïmplementeerd. De eigenschappen van de resource worden mogelijk wel of niet gewijzigd. De bewerking retourneert dit wijzigingstype wanneer er niet genoeg informatie is om te bepalen of eigenschappen worden gewijzigd. U ziet deze voorwaarde alleen als de resultaatindeling is ingesteld op ResourceIdOnly.

Als u niet alle wijzigingstypen hoeft te weten, kunt u het -WhatIfExcludeChangeType argument gebruiken om de typen weg te laten waarin u niet geïnteresseerd bent.

Als u niet alle wijzigingstypen hoeft te weten, kunt u het --what-if-exclude-change-types argument gebruiken om de typen weg te laten waarin u niet geïnteresseerd bent.

Wat-als-resultaten gebruiken in een script

U kunt de uitvoer van de wat-als-bewerking in een script of als onderdeel van een geautomatiseerd implementatieproces gebruiken.

U kunt de resultaten ophalen met behulp van de Get-AzResourceGroupDeploymentWhatIfResult cmdlet. Vervolgens kan uw script de resultaten parseren en aangepaste logica uitvoeren die u mogelijk nodig hebt.

U kunt de onbewerkte JSON-resultaten ophalen door het --no-pretty-print argument toe te voegen aan de CLI-opdracht. Vervolgens kan uw script de resultaten parseren en aangepaste logica uitvoeren die u mogelijk nodig hebt.

Implementatiemodi en verwijdering van resources

Er zijn momenten waarop u het verwijderen van resources wilt bevestigen tijdens het implementeren van de sjabloon. Daartoe worden de wat-als-bewerkingsaccounts gebruikt voor de implementatiemodus die u gebruikt. Als u de volledige implementatiemodus gebruikt, rapporteert Resource Manager de resources die worden verwijderd omdat deze niet zijn gedefinieerd in uw implementatie.

Laten we eens kijken naar een voorbeeld van een sjabloon die een bestaande resource bijwerkt en wordt geïmplementeerd in de volledige modus:

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

Hier volgt een uitleg van wat er in dit voorbeeld gebeurt:

  • De sjabloon werkt een opslagaccount bij met de naam storage-1, dat al is geïmplementeerd. De SKU verandert van LRS in GRS en de owner tag verandert de waarde in Team A. In de wat-als-uitvoer ziet u een wijzigingstype Wijzigen voor deze resource.
  • De sjabloon maakt een nieuw Azure Cosmos DB-account met de naam cosmos-db-1, dat nog niet bestaat in de resourcegroep. In de wat-als-uitvoer ziet u een wijzigingstype maken voor deze resource.
  • De sjabloon bevat niet de logische Azure SQL-server die al bestaat in de resourcegroep. Omdat de implementatie gebruikmaakt van de volledige modus, toont de wat-als-uitvoer een wijzigingstype Verwijderen voor deze resource. Als de implementatie de incrementele modus gebruikt in plaats van de volledige modus, wordt het wijzigingstype genegeerd .

Uw implementaties bevestigen

Als u een voorbeeld van wijzigingen wilt bekijken voordat u een sjabloon implementeert, gebruikt u de -Confirm parameter met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, geeft u aan dat u de implementatie wilt voltooien.

Tip

Het is een goed idee om uw implementatieopdrachten uit te voeren met de -Confirm switch, met name als u in de volledige modus implementeert. Als u de -Confirm schakeloptie gebruikt, kunt u de bewerking stoppen als u niet tevreden bent met de voorgestelde wijzigingen.

Als u een voorbeeld van wijzigingen wilt bekijken voordat u een sjabloon implementeert, gebruikt u het --confirm-with-what-if argument met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, geeft u aan dat u de implementatie wilt voltooien.

Tip

Het is een goed idee om uw implementatieopdrachten uit te voeren met het --confirm-with-what-if argument, met name als u in de volledige modus implementeert. Als u de --confirm-with-what-if schakeloptie gebruikt, kunt u de bewerking stoppen als u niet tevreden bent met de voorgestelde wijzigingen.