Voorspellen wat een implementatie doet met behulp van wat-als

Voltooid

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

  • Zal ik iets breken?
  • Ga ik iets verwijderen?
  • Hoe is deze implementatie van invloed 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. Een betere benadering is het gebruik van de wat-als- bewerking. 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 de wijzigingen te markeren wanneer u een sjabloon implementeert. Met de wat-als-bewerking worden geen wijzigingen aangebracht in bestaande middelen. In plaats daarvan worden de wijzigingen voorspeld als de opgegeven sjabloon wordt geïmplementeerd op resourcegroep- en abonnementsniveau.

Notitie

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

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 in een resourcegroep. Wanneer u de parameter -Whatif aan deze opdracht toevoegt, schakelt de opdracht over van het uitvoeren van de implementatie tot het rapporteren van een preview- van wat er gebeurt als u deze uitvoert.

Met de opdracht az deployment group what-if 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. Als u deze parameter opneemt, krijgt u een uitgebreide uitvoer die bestaat uit een lijst met bronnen die gaan wijzigen. In de uitvoer ziet u ook details over alle eigenschappen die worden gewijzigd in overeenstemming met de sjabloon.
  • ResourceIdOnly. Deze modus retourneert een lijst met resources die worden gewijzigd, maar niet alle details.

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/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.

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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Typen wijzigingen die wat-als detecteert

Wanneer u de wat-als-bewerking gebruikt, worden zes typen wijzigingen vermeld:

Type Uitleg Effect
Maken De resource bestaat momenteel niet, maar is gedefinieerd in de sjabloon. De resource wordt gemaakt.
Verwijderen Dit wijzigingstype is alleen van toepassing wanneer u de volledige modus voor implementatie gebruikt. De resource bestaat, maar is 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 is 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 is 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.
Modificeren De resource bestaat en is 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 is gedefinieerd in de sjabloon. De resource wordt opnieuw geïmplementeerd. De eigenschappen van de resource kunnen al dan niet veranderen. De bewerking retourneert dit wijzigingstype wanneer er onvoldoende informatie is om te bepalen of er eigenschappen worden gewijzigd. U ziet deze voorwaarde alleen wanneer de resultaatindeling is ingesteld op ResourceIdOnly.

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

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

Wat-alsresultaten 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 cmdlet Get-AzResourceGroupDeploymentWhatIfResult. 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 argument --no-pretty-print 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 houdt de wat-als-operatie rekening met 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 met wijzigingstypen voor drie resources, waarvan sommige al bestaan.

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- naar GRS-, en de owner tag verandert van waarde naar Team A-. In de wat-als-uitvoer wordt een Modify-type wijziging voor deze resource weergegeven.
  • 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 'Maak' () voor deze resource.
  • De sjabloon bevat niet de logische Azure SQL-server die al in deze resourcegroep bestaat. Omdat de implementatie gebruikmaakt van de volledige modus, wordt in de wat-als-uitvoer een type verwijderen wijzigingstype voor deze resource weergegeven. Als de implementatie de incrementele modus gebruikt in plaats van de volledige modus, wordt het wijzigingstype in plaats daarvan Negeren.

Uw implementaties bevestigen

Als u een voorbeeld van wijzigingen wilt bekijken voordat u een sjabloon implementeert, gebruikt u de parameter -Confirm met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, bevestigt u dat de implementatie moet worden voltooid.

Fooi

Het is een goed idee om uw implementatieopdrachten uit te voeren met de -Confirm switch, vooral als u in de volledige modus implementeert. Als u de -Confirm switch 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 argument --confirm-with-what-if met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, bevestigt u dat de implementatie moet worden voltooid.

Tip

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