Wat-als-bewerking voor bicep-implementatie

Voordat u een Bicep-bestand implementeert, kunt u een voorbeeld bekijken van de wijzigingen die zullen plaatsvinden. Azure Resource Manager biedt de what-if-bewerking om u te laten zien hoe resources veranderen als u het Bicep-bestand implementeert. Met de 'wat-als'-bewerking worden er geen wijzigingen doorgevoerd voor bestaande resources. In plaats daarvan worden de wijzigingen voorspeld als het opgegeven Bicep-bestand wordt geïmplementeerd.

U kunt de what-if-bewerking gebruiken met Azure PowerShell, Azure CLI of REST API bewerkingen. Wat-als wordt ondersteund voor implementaties op resourcegroep-, abonnements-, beheergroep- en tenantniveau.

Microsoft Learn

Zie Preview azure deployment changes by using what-if on Microsoft Learn (Preview azure deployment changes by using what-if on Microsoft Learn ) voor meer informatie over de what-if-bewerking en voor praktijkvoorbeelden.

De Azure PowerShell installeren

Als u what-if wilt gebruiken in PowerShell, 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 Install Azure PowerShell voor meer informatie over het installeren Azure PowerShell.

Azure CLI-module installeren

Als u what-if 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 bekijken

Wanneer u what-if gebruikt in PowerShell of Azure CLI, bevat de uitvoer resultaten met kleurcode die u helpen de verschillende typen wijzigingen te zien.

Wat-als-bewerking voor Bicep-implementatie fullresourcepayload 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

Met de what-if-bewerking kan de verwijzingsfunctie niet worden opgelost. Telkens wanneer u een eigenschap in stelt op een sjabloonexpressie die de referentiefunctie bevat, verandert de eigenschap in what-if-rapporten. Dit gedrag teert omdat what-if de huidige waarde van de eigenschap (zoals of voor een Booleaanse waarde) vergelijkt met de niet-opgeloste true false sjabloonexpressie. Deze waarden komen natuurlijk niet overeen. Wanneer u het Bicep-bestand implementeert, verandert de eigenschap alleen wanneer de sjabloonexpressie wordt omgeslagen in een andere waarde.

What-if-opdrachten

Azure PowerShell

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

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

U kunt de -Confirm schakelparameter gebruiken om een voorbeeld van de wijzigingen te bekijken en wordt 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 inspecteren. Gebruik Get-AzResourceGroupDeploymentWhatIfResult of Get-AzSubscriptionDeploymentWhatIfResultom een object op te halen dat u programmatisch kunt inspecteren op wijzigingen.

  • $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 Bicep-bestand implementeert, gebruikt u:

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

Gebruik bijvoorbeeld az deployment group create --confirm-with-what-if of voor -c implementaties van resourcegroep.

De voorgaande opdrachten retourneren een tekstsamenvatting die u handmatig kunt inspecteren. Gebruik de schakelknop om een JSON-object op te halen dat u programmatisch kunt controleren op --no-pretty-print wijzigingen. Gebruik bijvoorbeeld voor az deployment group what-if --no-pretty-print implementaties van resourcegroep.

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

Azure REST API

Gebruik REST API voor meer informatie:

Wijzigingstypen

De what-if-bewerking bevat zes verschillende typen wijzigingen:

  • Maken: de resource bestaat momenteel niet, maar is gedefinieerd in het Bicep-bestand. De resource wordt gemaakt.
  • Verwijderen: dit wijzigingstype is alleen van toepassing wanneer u de volledige modus gebruikt voor de implementatie van JSON-sjablonen. De resource bestaat, maar is niet gedefinieerd in het Bicep-bestand. Met de volledige modus wordt de resource verwijderd. Alleen resources die ondersteuning bieden voor het verwijderen van de volledige modus zijn opgenomen in dit wijzigingstype.
  • Negeren: de resource bestaat, maar is niet gedefinieerd in het Bicep-bestand. De resource wordt niet geïmplementeerd of gewijzigd.
  • NoChange: de resource bestaat en wordt gedefinieerd in het Bicep-bestand. 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.
  • Wijzigen: de resource bestaat en wordt gedefinieerd in het Bicep-bestand. 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 wordt gedefinieerd in het Bicep-bestand. 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 kunt het detailniveau bepalen 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 parameter voor -WhatIfResultFormat PowerShell-implementatieopdrachten. Gebruik in de programmatische objectopdrachten de ResultFormat parameter .

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

De volgende resultaten tonen de twee verschillende uitvoerindelingen:

  • Volledige nettoladingen van resources

    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.
    

What-if-bewerking uitvoeren

Omgeving instellen

Om te zien hoe what-if werkt, gaan we een aantal tests uitvoeren. Implementeer eerst een Bicep-bestand dat een virtueel netwerk maakt. U gebruikt dit virtuele netwerk om te testen hoe wijzigingen worden gerapporteerd door what-if. Download een kopie van het Bicep-bestand.

resource vnet 'Microsoft.Network/virtualNetworks@2021-02-01' = {
  name: 'vnet-001'
  location: resourceGroup().location
  tags: {
    CostCenter: '12345'
    Owner: 'Team A'
  }
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    enableVmProtection: false
    enableDdosProtection: false
    subnets: [
      {
        name: 'subnet001'
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'subnet002'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Als u het Bicep-bestand wilt implementeren, gebruikt u:

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile "what-if-before.bicep"

Testaanpassingen

Nadat de implementatie is voltooid, kunt u de what-if-bewerking testen. Deze keer implementeert u een Bicep-bestand dat het virtuele netwerk wijzigt. Er ontbreekt een van de oorspronkelijke tags, er is een subnet verwijderd en het adres voorvoegsel is gewijzigd. Download een kopie van het Bicep-bestand.

resource vnet 'Microsoft.Network/virtualNetworks@2021-02-01' = {
  name: 'vnet-001'
  location: resourceGroup().location
  tags: {
    CostCenter: '12345'
  }
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/15'
      ]
    }
    enableVmProtection: false
    enableDdosProtection: false
    subnets: [
      {
        name: 'subnet002'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Als u de wijzigingen wilt weergeven, gebruikt u:

New-AzResourceGroupDeployment `
  -Whatif `
  -ResourceGroupName ExampleGroup `
  -TemplateFile "what-if-after.bicep"

De wat-als-uitvoer lijkt op het volgende:

Wat-als-bewerkingsuitvoer voor Bicep-implementatie

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.enableVmProtection: false
    ~ 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.

Boven aan de uitvoer ziet u dat kleuren zijn gedefinieerd om het type wijzigingen aan te geven.

Onderaan de uitvoer ziet u dat de tag Eigenaar is verwijderd. Het adres voorvoegsel is gewijzigd van 10.0.0.0/16 in 10.0.0.0/15. Het subnet subnet001 is verwijderd. Onthoud dat deze wijzigingen niet zijn geïmplementeerd. U ziet een voorbeeld van de wijzigingen die zullen plaatsvinden als u het Bicep-bestand implementeert.

Sommige eigenschappen die als verwijderd worden vermeld, worden niet daadwerkelijk gewijzigd. Eigenschappen kunnen onjuist worden gerapporteerd als verwijderd wanneer ze niet in het Bicep-bestand staan, maar worden tijdens de implementatie automatisch ingesteld als standaardwaarden. Dit resultaat wordt beschouwd als 'ruis' in het what-if-antwoord. De uiteindelijk geïmplementeerde resource heeft de waarden die zijn ingesteld voor de eigenschappen. Naarmate de what-if-bewerking zich verder ontwikkelde, worden deze eigenschappen uit het resultaat gefilterd.

Programmatisch what-if-resultaten evalueren

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

$results = Get-AzResourceGroupDeploymentWhatIfResult `
  -ResourceGroupName ExampleGroup `
  --template-file "what-if-after.bicep"

U kunt een samenvatting van elke wijziging bekijken.

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

Verwijdering bevestigen

Als u een voorbeeld van wijzigingen wilt bekijken voordat u een Bicep-bestand implementeert, gebruikt u de parameter switch bevestigen met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, reageert u of u wilt dat de implementatie wordt voltooid.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Confirm `
  -TemplateFile "what-if-after.bicep"

Implementatie van Bicep wat-als-bewerkingsuitvoer implementatiemodus voltooid

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.enableVmProtection: false
    ~ 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.

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 u kunt bevestigen dat u de implementatie wilt uitvoeren.

Resources opschonen

Wanneer u de voorbeeldresources niet meer nodig hebt, gebruikt u Azure CLI of Azure PowerShell de resourcegroep te verwijderen.

az group delete --name ExampleGroup

SDK's

U kunt de what-if-bewerking gebruiken via de Azure SDK's.

Volgende stappen