ARM template deployment what-if operation (Wat-als-bewerking bij het implementeren van ARM-sjablonen)

Voordat u een ARM-sjabloon (Azure Resource Manager) implementeert, kunt u een voorbeeld bekijken van de wijzigingen die worden aangebracht. Azure Resource Manager biedt de wat-als-bewerking om u te laten zien hoe resources veranderen als u de sjabloon implementeert. Met de 'wat-als'-bewerking worden er geen wijzigingen doorgevoerd voor bestaande resources. In plaats daarvan worden de wijzigingen voorspeld, mocht de opgegeven sjabloon worden geïmplementeerd.

U kunt de wat-als-bewerking gebruiken met Azure PowerShell-, Azure CLI- of REST API-bewerkingen. Wat-als wordt ondersteund voor implementaties van resourcegroepen, abonnementen, beheergroepen en tenants.

Training en bronnen

Zie Preview van Azure-implementatiewijzigingen met behulp van wat-als voor meer informatie over wat-als en praktische richtlijnen.

Vereiste machtigingen

Als u een Bicep-bestand of ARM-sjabloon wilt implementeren, hebt u schrijftoegang nodig voor de resources die u implementeert en moet u zijn gemachtigd om alle bewerkingen op het resourcetype Microsoft.Resources/deployments te kunnen uitvoeren. Als u bijvoorbeeld een virtuele machine wilt implementeren, hebt u machtigingen en Microsoft.Resources/deployments/* nodigMicrosoft.Compute/virtualMachines/write. De wat-als-bewerking heeft dezelfde machtigingsvereisten.

Zie Ingebouwde Azure-rollen voor een lijst met rollen en machtigingen.

Wat-als-limieten

Wat-als breidt geneste sjablonen uit totdat deze limieten zijn bereikt:

  • 500 geneste sjablonen.
  • 800 resourcegroepen in een implementatie voor meerdere resourcegroepen.
  • 5 minuten voor het uitbreiden van de geneste sjablonen.

Wanneer een van de limieten is bereikt, wordt het wijzigingstype van de resterende resources ingesteld op Negeren.

Azure PowerShell-module installeren

Als u what-if in PowerShell wilt gebruiken, moet u versie 4.2 of hoger van de Az-module hebben.

Als u de module wilt installeren, gebruikt u:

Install-Module -Name Az -Force

Zie Azure PowerShell installeren voor meer informatie over het installeren van modules.

Azure CLI-module installeren

Als u wat-als wilt gebruiken in Azure CLI, moet u Azure CLI 2.14.0 of hoger hebben. Installeer indien nodig de meest recente versie van Azure CLI.

Resultaten weergeven

Wanneer u what-if gebruikt in PowerShell of Azure CLI, bevat de uitvoer kleurgecodeerde resultaten waarmee u de verschillende typen wijzigingen kunt zien.

Schermopname van Resource Manager wat-als-bewerking voor sjabloonimplementatie met volledige nettolading van resources en wijzigingstypen.

De tekstuitvoer is:

Resource and property changes are indicated with these symbols:
  - Delete
  + Create
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
    - tags.Owner: "Team A"
    ~ properties.addressSpace.addressPrefixes: [
      - 0: "10.0.0.0/16"
      + 0: "10.0.0.0/15"
      ]
    ~ properties.subnets: [
      - 0:

          name:                     "subnet001"
          properties.addressPrefix: "10.0.0.0/24"

      ]

Resource changes: 1 to modify.

Notitie

De wat-als-bewerking kan de verwijzingsfunctie niet oplossen. Telkens wanneer u een eigenschap instelt op een sjabloonexpressie die de verwijzingsfunctie bevat, wordt de eigenschap gewijzigd door wat-als-rapporten. Dit gedrag treedt op omdat what-if de huidige waarde van de eigenschap (zoals true of false voor een Booleaanse waarde) vergelijkt met de niet-opgeloste sjabloonexpressie. Deze waarden komen uiteraard niet overeen. Wanneer u de sjabloon implementeert, wordt de eigenschap alleen gewijzigd wanneer de sjabloonexpressie wordt omgezet in een andere waarde.

Wat-als-opdrachten

Azure PowerShell

Als u een voorbeeld van wijzigingen wilt bekijken voordat u een sjabloon implementeert, gebruikt u New-AzResourceGroupDeployment of New-AzSubscriptionDeployment. Voeg de -Whatif switchparameter toe aan de implementatieopdracht.

  • New-AzResourceGroupDeployment -Whatif voor resourcegroepimplementaties

  • New-AzSubscriptionDeployment -Whatif en New-AzDeployment -Whatif voor implementaties op abonnementsniveau

U kunt de -Confirm parameter switch gebruiken om een voorbeeld van de wijzigingen te bekijken en wordt u gevraagd om door te gaan met de implementatie.

  • New-AzResourceGroupDeployment -Confirm voor resourcegroepimplementaties
  • New-AzSubscriptionDeployment -Confirm en New-AzDeployment -Confirm voor implementaties op abonnementsniveau

De voorgaande opdrachten retourneren een tekstsamenvatting die u handmatig kunt controleren. Als u een object wilt ophalen dat u programmatisch kunt controleren op wijzigingen, gebruikt u Get-AzResourceGroupDeploymentWhatIfResult of Get-AzSubscriptionDeploymentWhatIfResult.

  • $results = Get-AzResourceGroupDeploymentWhatIfResult voor resourcegroepimplementaties
  • $results = Get-AzSubscriptionDeploymentWhatIfResult of $results = Get-AzDeploymentWhatIfResult voor implementaties op abonnementsniveau

Azure CLI

Als u een voorbeeld van wijzigingen wilt bekijken voordat u een sjabloon implementeert, gebruikt u:

U kunt de schakeloptie (of de --confirm-with-what-if korte vorm -c) gebruiken om een voorbeeld van de wijzigingen te bekijken en te worden gevraagd om door te gaan met de implementatie. Voeg deze schakeloptie toe aan:

Gebruik az deployment group create --confirm-with-what-if bijvoorbeeld of -c voor resourcegroepimplementaties.

De voorgaande opdrachten retourneren een tekstsamenvatting die u handmatig kunt controleren. Als u een JSON-object wilt ophalen dat u programmatisch kunt controleren op wijzigingen, gebruikt u de --no-pretty-print schakeloptie. Gebruik az deployment group what-if --no-pretty-print bijvoorbeeld voor resourcegroepimplementaties.

Als u de resultaten zonder kleuren wilt retourneren, opent u uw Azure CLI-configuratiebestand . Stel no_color in op Ja.

Azure REST API

Gebruik voor REST API:

Wijzigingstypen

De wat-als-bewerking bevat zeven verschillende typen wijzigingen:

  • 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 gebruikt voor implementatie. De resource bestaat, maar wordt niet gedefinieerd in de sjabloon. Met de volledige modus wordt de resource verwijderd. Alleen resources die ondersteuning bieden voor het verwijderen van de volledige modus , worden opgenomen in dit wijzigingstype.
  • Negeren: de resource bestaat, maar is niet gedefinieerd in de sjabloon. De resource wordt niet geïmplementeerd of gewijzigd. Wanneer u de limieten voor het uitbreiden van geneste sjablonen bereikt, krijgt u dit wijzigingstype te zien. Zie What-if-limieten.
  • 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 ResultFormat is ingesteld op FullResourcePayloads. Dit is de standaardwaarde.
  • NoEffect: de eigenschap is alleen gereed en wordt genegeerd door de service. De eigenschap is bijvoorbeeld sku.tier altijd ingesteld op overeenkomst sku.name in de Microsoft.ServiceBus naamruimte.
  • Wijzigen: 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 ResultFormat is ingesteld op FullResourcePayloads. Dit is de standaardwaarde.
  • Implementeren: de resource bestaat en is 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 wanneer ResultFormat is ingesteld op ResourceIdOnly.

Resultaatopmaak

U bepaalt het detailniveau dat wordt geretourneerd over de voorspelde wijzigingen. U hebt hiervoor twee opties:

  • FullResourcePayloads : retourneert een lijst met resources die worden gewijzigd en details over de eigenschappen die worden gewijzigd
  • ResourceIdOnly : retourneert een lijst met resources die worden gewijzigd

De standaardwaarde is FullResourcePayloads.

Gebruik de -WhatIfResultFormat parameter voor PowerShell-implementatieopdrachten. Gebruik ResultFormat de parameter in de programmatische objectopdrachten.

Gebruik voor Azure CLI de --result-format parameter .

De volgende resultaten tonen de twee verschillende uitvoerindelingen:

  • Volledige resourcepayloads

    Resource and property changes are indicated with these symbols:
      - Delete
      + Create
      ~ Modify
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/./resourceGroups/ExampleGroup
    
      ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
        - tags.Owner: "Team A"
        ~ properties.addressSpace.addressPrefixes: [
          - 0: "10.0.0.0/16"
          + 0: "10.0.0.0/15"
          ]
        ~ properties.subnets: [
          - 0:
            name:                     "subnet001"
            properties.addressPrefix: "10.0.0.0/24"
    
          ]
    
    Resource changes: 1 to modify.
    
  • Alleen resource-id

    Resource and property changes are indicated with this symbol:
      ! Deploy
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/./resourceGroups/ExampleGroup
    
      ! Microsoft.Network/virtualNetworks/vnet-001
    
    Resource changes: 1 to deploy.
    

Wat-als-bewerking uitvoeren

Omgeving instellen

Om te zien hoe what-if werkt, gaan we enkele tests uitvoeren. Implementeer eerst een sjabloon waarmee een virtueel netwerk wordt gemaakt. U gebruikt dit virtuele netwerk om te testen hoe wijzigingen worden gerapporteerd door wat-als.

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"

Testwijziging

Nadat de implementatie is voltooid, kunt u de wat-als-bewerking testen. Deze keer implementeert u een sjabloon waarmee het virtuele netwerk wordt gewijzigd. Er ontbreekt een van de oorspronkelijke tags, een subnet is verwijderd en het adresvoorvoegsel is gewijzigd.

New-AzResourceGroupDeployment `
  -Whatif `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

De wat-als-uitvoer lijkt op het volgende:

Schermopname van uitvoer van Resource Manager sjabloonimplementatie met wijzigingen.

De tekstuitvoer is:

Resource and property changes are indicated with these symbols:
  - Delete
  + Create
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
    - tags.Owner: "Team A"
    ~ properties.addressSpace.addressPrefixes: [
      - 0: "10.0.0.0/16"
      + 0: "10.0.0.0/15"
      ]
    ~ properties.subnets: [
      - 0:

        name:                     "subnet001"
        properties.addressPrefix: "10.0.0.0/24"

      ]

Resource changes: 1 to modify.

U ziet boven aan de uitvoer dat kleuren zijn gedefinieerd om het type wijzigingen aan te geven.

Onderaan de uitvoer ziet u de tag Eigenaar is verwijderd. Het adresvoorvoegsel is gewijzigd van 10.0.0.0/16 in 10.0.0.0/15. Het subnet met de naam subnet001 is verwijderd. Onthoud dat deze wijzigingen niet zijn geïmplementeerd. U ziet een voorbeeld van de wijzigingen die worden aangebracht als u de sjabloon implementeert.

Sommige eigenschappen die worden vermeld als verwijderd, worden niet daadwerkelijk gewijzigd. Eigenschappen kunnen onjuist worden gerapporteerd als verwijderd wanneer ze zich niet in de sjabloon bevinden, maar worden tijdens de implementatie automatisch ingesteld als standaardwaarden. Dit resultaat wordt beschouwd als 'ruis' in het wat-als-antwoord. Voor de uiteindelijk geïmplementeerde resource worden de waarden voor de eigenschappen ingesteld. Naarmate de wat-als-bewerking volwassener wordt, worden deze eigenschappen uit het resultaat gefilterd.

Programmatisch wat-als-resultaten evalueren

Nu gaan we de wat-als-resultaten programmatisch evalueren door de opdracht in te stellen op een variabele.

$results = Get-AzResourceGroupDeploymentWhatIfResult `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

U ziet een overzicht van elke wijziging.

foreach ($change in $results.Changes)
{
  $change.Delta
}

Verwijdering bevestigen

De wat-als-bewerking ondersteunt het gebruik van de implementatiemodus. Wanneer de modus Voltooid is ingesteld, worden resources die niet in de sjabloon staan, verwijderd. In het volgende voorbeeld wordt een sjabloon geïmplementeerd waarvoor geen resources zijn gedefinieerd in de volledige modus.

Als u de wijzigingen wilt bekijken voordat u een sjabloon implementeert, gebruikt u de parameter confirm switch met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, antwoordt u dat u de implementatie wilt voltooien.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Mode Complete `
  -Confirm `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"

Omdat er geen resources zijn gedefinieerd in de sjabloon en de implementatiemodus is ingesteld op voltooiing, wordt het virtuele netwerk verwijderd.

Schermopname van Resource Manager uitvoer van de wat-als-bewerking voor sjabloonimplementatie in de implementatiemodus voltooid.

De tekstuitvoer is:

Resource and property changes are indicated with this symbol:
  - Delete

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  - Microsoft.Network/virtualNetworks/vnet-001

      id:
"/subscriptions/./resourceGroups/ExampleGroup/providers/Microsoft.Network/virtualNet
works/vnet-001"
      location:        "centralus"
      name:            "vnet-001"
      tags.CostCenter: "12345"
      tags.Owner:      "Team A"
      type:            "Microsoft.Network/virtualNetworks"

Resource changes: 1 to delete.

Are you sure you want to execute the deployment?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

U ziet de verwachte wijzigingen en kunt bevestigen dat u de implementatie wilt uitvoeren.

SDK's

U kunt de wat-als-bewerking gebruiken via de Azure SDK's.

Volgende stappen