Wat-als-bewerking voor Bicep-implementatie
Voordat u een Bicep-bestand implementeert, kunt u een voorbeeld bekijken van de wijzigingen die worden aangebracht. Azure Resource Manager biedt de wat-als-bewerking om te zien hoe resources worden gewijzigd 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 wat-als-bewerking gebruiken met Azure PowerShell-, Azure CLI- of REST API-bewerkingen. What-if wordt ondersteund voor implementaties op resourcegroep-, abonnements-, beheergroep- en tenantniveau.
Tijdens What-If bewerkingen worden de evaluatie en uitbreiding van templateLink
niet ondersteund. Als gevolg hiervan zijn resources die zijn geïmplementeerd met behulp van sjabloonkoppelingen binnen geneste implementaties, inclusief verwijzingen naar sjabloonspecificaties, niet zichtbaar in de resultaten van de What-If bewerking.
Training en bronnen
Als u liever meer wilt weten over de wat-als-bewerking via stapsgewijze richtlijnen, raadpleegt u Azure-implementatiewijzigingen bekijken 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 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.
- Het uitvouwen van de geneste sjablonen duurt vijf minuten.
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 Beschikken over Azure CLI 2.14.0 of hoger. 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.
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 'what-if'-rapporten gewijzigd. 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 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
switchparameter toe aan de implementatieopdracht.
New-AzResourceGroupDeployment -Whatif
voor resourcegroepimplementatiesNew-AzSubscriptionDeployment -Whatif
enNew-AzDeployment -Whatif
voor implementaties op abonnementsniveau
U kunt de -Confirm
switchparameter gebruiken om een voorbeeld van de wijzigingen te bekijken en te worden gevraagd om door te gaan met de implementatie.
New-AzResourceGroupDeployment -Confirm
voor resourcegroepimplementatiesNew-AzSubscriptionDeployment -Confirm
enNew-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 Bicep-bestand implementeert, gebruikt u:
- az deployment group what-if voor resourcegroepimplementaties
- az deployment sub what-if voor implementaties op abonnementsniveau
- az deployment mg what-if voor beheergroepimplementaties
- az deployment tenant what-if voor tenantimplementaties
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:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
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 het Azure CLI-configuratiebestand . Stel no_color in op Ja.
Azure REST API
Gebruik voor REST API:
- Implementaties - What If voor resourcegroepimplementaties
- Implementaties - What If At-abonnementsbereik voor abonnementsimplementaties
- Implementaties - What If At-beheergroepbereik voor beheergroepimplementaties
- Implementaties- What If At Tenant-bereik voor tenantimplementaties.
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 volledige modusverwijdering ondersteunen , worden 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, krijgt u dit wijzigingstype te zien. Zie Wat-als-limieten.
- 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. - NoEffect: de eigenschap is alleen gereed en wordt genegeerd door de service. De eigenschap is bijvoorbeeld
sku.tier
altijd ingesteld op overeenkomstsku.name
in deMicrosoft.ServiceBus
naamruimte. - 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 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 voor PowerShell-implementatieopdrachten de -WhatIfResultFormat
parameter . 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.
Wat-als-bewerking uitvoeren
Omgeving instellen
Laten we enkele tests uitvoeren om te zien hoe what-if werkt. Implementeer eerst een Bicep-bestand waarmee een virtueel netwerk wordt gemaakt. U gebruikt dit virtuele netwerk om te testen hoe wijzigingen worden gerapporteerd door wat-als. 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"
Testwijziging
Nadat de implementatie is voltooid, bent u klaar om de wat-als-bewerking te 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@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:
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 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 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 tijdens de implementatie automatisch ingesteld als standaardwaarden. Dit resultaat wordt beschouwd als 'ruis' in het wat-als-antwoord. De uiteindelijk geïmplementeerde resource bevat de waarden die zijn ingesteld voor de eigenschappen. Naarmate de wat-als-bewerking volwassener wordt, worden deze eigenschappen uit het resultaat gefilterd.
Programmatisch wat-als-resultaten evalueren
Laten we nu 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 zien.
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 confirm switch met de implementatieopdracht. Als de wijzigingen zijn zoals verwacht, reageert u dat u de implementatie wilt voltooien.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Confirm `
-TemplateFile "what-if-after.bicep"
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 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 om de resourcegroep te verwijderen.
az group delete --name ExampleGroup
SDK's
U kunt de wat-als-bewerking gebruiken via de Azure SDK's.
Gebruik wat-als voor Python.
Voor Java gebruikt u DeploymentWhatIf Class.
Voor .NET gebruikt u DeploymentWhatIf Class.
Volgende stappen
- Als u de wat-als-bewerking in een pijplijn wilt gebruiken, raadpleegt u ARM-sjablonen testen met What-If in een pijplijn.
- Als u onjuiste resultaten van de wat-als-bewerking ziet, meldt u de problemen op https://aka.ms/whatifissues.
- Voor een Learn-module waarin het gebruik van wat-als wordt gedemonstreerd, raadpleegt u Voorbeelden van wijzigingen bekijken en Azure-resources valideren met behulp van wat-als en de TEST-toolkit voor ARM-sjablonen.