Delen via


Bicep-implementatie wat-als-bewerking

Voordat u een Bicep-bestand implementeert, kunt u een voorbeeld bekijken van de wijzigingen die zich voordoen. Azure Resource Manager biedt de wat-als-bewerking waarmee u kunt 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 is 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 tenantniveau.

Tijdens Wat-als-bewerkingen worden de evaluatie en uitbreiding templateLink ervan niet ondersteund. Als gevolg hiervan zijn alle resources die zijn geïmplementeerd met behulp van sjabloonkoppelingen binnen geneste implementaties, inclusief sjabloonspecificatieverwijzingen, niet zichtbaar in de what-if-bewerkingsresultaten.

Trainingsmateriaal

Als u liever meer wilt weten over de wat-als-bewerking door stapsgewijze richtlijnen, raadpleegt u Preview van Azure-implementatiewijzigingen met behulp van wat-als.

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 de benodigde machtigingen en Microsoft.Resources/deployments/* machtigingen 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 van meerdere resources.
  • Vijf minuten duren voordat de geneste sjablonen zijn uitgebreid.

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

Azure PowerShell-module installeren

Als u wat-als 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 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 Beschikken over Azure CLI 2.14.0 of hoger. Installeer indien nodig de meest recente versie van Azure CLI.

Resultaten bekijken

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

Bicep-implementatie wat-als-bewerking 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

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 wat-als 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 het Bicep-bestand 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 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 switchparameter gebruiken om een voorbeeld van de wijzigingen te bekijken en u 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

Met de voorgaande opdrachten wordt een tekstoverzicht geretourneerd dat u handmatig kunt inspecteren. Als u een object wilt ophalen dat u programmatisch op wijzigingen kunt controleren, 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 Bicep-bestand implementeert, gebruikt u:

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

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

Met de voorgaande opdrachten wordt een tekstoverzicht geretourneerd dat u handmatig kunt inspecteren. Als u een JSON-object wilt ophalen dat u programmatisch op wijzigingen kunt controleren, gebruikt u de --no-pretty-print schakeloptie. Gebruik bijvoorbeeld az deployment group what-if --no-pretty-print 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

Voor REST API gebruikt u:

Wijzigingstypen

De wat-als-bewerking bevat zeven 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 verwijdering in 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. Wanneer u de limieten voor het uitbreiden van geneste sjablonen bereikt, ziet u dit wijzigingstype. Wat-als-limieten bekijken.
  • NoChange: de resource bestaat en is 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, wat de standaardwaarde is.
  • NoEffect: De eigenschap is alleen gereed en wordt genegeerd door de service. De sku.tier eigenschap is bijvoorbeeld altijd ingesteld op overeenkomst sku.name in de Microsoft.ServiceBus naamruimte.
  • Wijzigen: De resource bestaat en is 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, wat de standaardwaarde is.
  • Implementeren: De resource bestaat en is 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 bepaalt het detailniveau dat wordt geretourneerd over de voorspelde wijzigingen. U hebt 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 de ResultFormat parameter in de programmatische objectopdrachten.

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

In de volgende resultaten worden de twee verschillende uitvoerindelingen weergegeven:

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

Wat-als-bewerking uitvoeren

Omgeving instellen

Laten we een aantal tests uitvoeren om te zien hoe wat-als werkt. 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@2023-11-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"

Testwijziging

Nadat de implementatie is voltooid, kunt u de wat-als-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 adresvoorvoegsel is gewijzigd. Download een kopie van het Bicep-bestand.

resource vnet 'Microsoft.Network/virtualNetworks@2023-11-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:

What-if-bewerkingsuitvoer van 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.

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

Onderaan de uitvoer ziet u dat de eigenaar van de tag 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. Houd er rekening mee dat deze wijzigingen niet zijn geïmplementeerd. U ziet een voorbeeld van de wijzigingen die plaatsvinden als u het Bicep-bestand implementeert.

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

Programmatisch wat-als-resultaten evalueren

Nu gaan we programmatisch de wat-als-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
}

Verwijderen bevestigen

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

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

Bicep-implementatie: wat-als-uitvoer-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 de implementatie moet worden uitgevoerd.

Resources opschonen

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

az group delete --name ExampleGroup

SDK's

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

Volgende stappen