Operace what-if nasazení Bicep
Před nasazením souboru Bicep si můžete zobrazit náhled změn, ke kterým dojde. Azure Resource Manager poskytuje operaci what-if (citlivostní analýza), která vám umožní zjistit, jak se změní prostředky, pokud nasadíte soubor Bicep. Operace what-if neprovede žádné změny stávajících prostředků. Místo toho předpovídá změny, pokud je zadaný soubor Bicep nasazen.
Operaci what-if můžete použít s operacemi Azure PowerShell, Azure CLI nebo REST API. Citlivostní analýza se podporuje pro nasazení na úrovni skupiny prostředků, předplatného, skupiny pro správu a tenanta.
Během What-If operací se vyhodnocení a rozšíření templateLink
nepodporuje. V důsledku toho se žádné prostředky nasazené pomocí odkazů na šablony v rámci vnořených nasazení, včetně odkazů na specifikace šablon, nezobrazí ve výsledcích operace What-If.
Školicí materiály
Pokud byste se raději o operaci what-if (citlivostní analýza) dozvěděli prostřednictvím podrobných pokynů, projděte si téma Věnované změnám nasazení Azure ve verzi Preview pomocí citlivostní analýzy.
Požadovaná oprávnění
Pokud chcete nasadit soubor Bicep nebo šablonu ARM, musíte mít přístup k zápisu pro prostředky, které nasazujete, a přístup ke všem operacím s prostředky typu Microsoft.Resources/deployments. Například k nasazení virtuálního počítače potřebujete Microsoft.Compute/virtualMachines/write
oprávnění a Microsoft.Resources/deployments/*
. Operace what-if má stejné požadavky na oprávnění.
Seznam rolí a oprávnění najdete v tématu Předdefinované role Azure.
Limity citlivostní analýzy
Citlivostní analýzy rozšiřuje vnořené šablony, dokud nedosáhnete těchto limitů:
- 500 vnořených šablon.
- 800 skupin prostředků v nasazení napříč skupinami prostředků.
- Rozbalení vnořených šablon trvalo 5 minut.
Při dosažení jednoho z limitů se typ změny zbývajících prostředků nastaví na Ignorovat.
Instalace modulu Azure PowerShell
Pokud chcete v PowerShellu použít citlivostní analýzy, musíte mít modul Az verze 4.2 nebo novější.
K instalaci modulu použijte:
Install-Module -Name Az -Force
Další informace o instalaci modulů najdete v tématu Instalace Azure PowerShell.
Instalace modulu Azure CLI
Pokud chcete v Azure CLI použít citlivostní analýzy, musíte mít Azure CLI 2.14.0 nebo novější. V případě potřeby si nainstalujte nejnovější verzi Azure CLI.
Zobrazit výsledky
Když použijete citlivostní analýza v PowerShellu nebo Azure CLI, výstup obsahuje barevně odlišované výsledky, které vám pomůžou zobrazit různé typy změn.
Textový výstup je:
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.
Poznámka
Operace what-if nemůže přeložit referenční funkci. Pokaždé, když nastavíte vlastnost výrazu šablony, který obsahuje referenční funkci, se změní sestavy citlivostní analýzy, která vlastnost změní. K tomuto chování dochází, protože what-if porovnává aktuální hodnotu vlastnosti (například true
nebo false
pro logickou hodnotu) s nevyřešeným výrazem šablony. Tyto hodnoty se samozřejmě nebudou shodovat. Když nasadíte soubor Bicep, vlastnost se změní pouze v případě, že se výraz šablony přeloží na jinou hodnotu.
Příkazy citlivostní analýzy
Azure PowerShell
Pokud chcete před nasazením souboru Bicep zobrazit náhled změn, použijte rutinu New-AzResourceGroupDeployment nebo New-AzSubscriptionDeployment. -Whatif
Přidejte parametr switch do příkazu pro nasazení.
New-AzResourceGroupDeployment -Whatif
pro nasazení skupin prostředkůNew-AzSubscriptionDeployment -Whatif
aNew-AzDeployment -Whatif
pro nasazení na úrovni předplatného
Pomocí parametru -Confirm
switch můžete zobrazit náhled změn a zobrazit výzvu k pokračování v nasazení.
New-AzResourceGroupDeployment -Confirm
pro nasazení skupin prostředkůNew-AzSubscriptionDeployment -Confirm
aNew-AzDeployment -Confirm
pro nasazení na úrovni předplatného
Předchozí příkazy vrátí textové shrnutí, které můžete ručně zkontrolovat. Pokud chcete získat objekt, u kterého můžete programově kontrolovat změny, použijte rutinu Get-AzResourceGroupDeploymentWhatIfResult nebo Get-AzSubscriptionDeploymentWhatIfResult.
$results = Get-AzResourceGroupDeploymentWhatIfResult
pro nasazení skupin prostředků$results = Get-AzSubscriptionDeploymentWhatIfResult
nebo$results = Get-AzDeploymentWhatIfResult
pro nasazení na úrovni předplatného
Azure CLI
Pokud chcete zobrazit náhled změn před nasazením souboru Bicep, použijte:
- az deployment group what-if pro nasazení skupin prostředků
- az deployment sub what-if pro nasazení na úrovni předplatného
- az deployment mg what-if pro nasazení skupin pro správu
- az deployment tenant what-if for tenant deployments
Pomocí přepínače (nebo jeho krátkého formátu-c
) můžete --confirm-with-what-if
zobrazit náhled změn a zobrazit výzvu k pokračování v nasazení. Přidejte tento přepínač do:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Například pro nasazení skupin prostředků použijte az deployment group create --confirm-with-what-if
nebo -c
.
Předchozí příkazy vrátí textové shrnutí, které můžete ručně zkontrolovat. Pokud chcete získat objekt JSON, který můžete programově zkontrolovat, jestli neobsahuje --no-pretty-print
změny, použijte přepínač . Použijte az deployment group what-if --no-pretty-print
například pro nasazení skupin prostředků.
Pokud chcete vrátit výsledky bez barev, otevřete konfigurační soubor Azure CLI . Nastavte no_color na Ano.
Azure REST API
Pro rozhraní REST API použijte:
- Nasazení – What If pro nasazení skupin prostředků
- Nasazení – Co když v oboru předplatného pro nasazení předplatného
- Nasazení – What If At Management Group Scope pro nasazení skupin pro správu
- Nasazení – What If At Tenant Scope (What If At Tenant Scope ) pro nasazení tenanta.
Typy změn
Operace citlivostní analýzy obsahuje sedm různých typů změn:
- Vytvořit: Prostředek v současné době neexistuje, ale je definovaný v souboru Bicep. Prostředek se vytvoří.
- Odstranění: Tento typ změny platí jenom při použití úplného režimu pro nasazení šablony JSON. Prostředek existuje, ale není definovaný v souboru Bicep. V úplném režimu se prostředek odstraní. Tento typ změny zahrnuje pouze prostředky, které podporují úplné odstranění .
- Ignorovat: Prostředek existuje, ale není definovaný v souboru Bicep. Prostředek se nebude nasazovat ani upravovat. Když dosáhnete limitů pro rozšíření vnořených šablon, narazíte na tento typ změny. Viz Limity citlivostní analýzy.
- NoChange: Prostředek existuje a je definovaný v souboru Bicep. Prostředek se znovu nasadí, ale vlastnosti prostředku se nezmění. Tento typ změny se vrátí, když je ResultFormat nastavený na
FullResourcePayloads
, což je výchozí hodnota. - NoEffect: Vlastnost je pouze pro připraveno a služba ji bude ignorovat. Například vlastnost je vždy nastavená tak,
sku.tier
aby odpovídalasku.name
Microsoft.ServiceBus
v oboru názvů . - Změnit: Prostředek existuje a je definovaný v souboru Bicep. Prostředek se znovu nasadí a vlastnosti prostředku se změní. Tento typ změny se vrátí, když je ResultFormat nastavený na
FullResourcePayloads
, což je výchozí hodnota. - Nasazení: Prostředek existuje a je definovaný v souboru Bicep. Prostředek se znovu nasadí. Vlastnosti prostředku se mohou nebo nemusí změnit. Operace vrátí tento typ změny, pokud nemá dostatek informací k určení, jestli se některé vlastnosti změní. Tato podmínka se zobrazí pouze v případě, že je vlastnost ResultFormat nastavená na
ResourceIdOnly
hodnotu .
Formát výsledku
Řídíte úroveň podrobností, která se vrátí o předpovězených změnách. Máte dvě možnosti:
- FullResourcePayloads – vrátí seznam prostředků, které se změní, a podrobnosti o vlastnostech, které se změní.
- ResourceIdOnly – vrátí seznam prostředků, které se změní.
Výchozí hodnota je FullResourcePayloads.
Pro příkazy nasazení PowerShellu -WhatIfResultFormat
použijte parametr . V příkazech programových objektů použijte ResultFormat
parametr .
Pro Azure CLI použijte --result-format
parametr .
Následující výsledky ukazují dva různé formáty výstupu:
Úplné datové části prostředků
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.
Pouze ID prostředku
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.
Spuštění operace citlivostní analýzy
Nastavení prostředí
Pokud chcete zjistit, jak funkce citlivostní analýzy funguje, spustíme několik testů. Nejprve nasaďte soubor Bicep, který vytvoří virtuální síť. Tuto virtuální síť použijete k testování způsobu hlášení změn pomocí citlivostní analýzy. Stáhněte si kopii souboru Bicep.
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'
}
}
]
}
}
Pokud chcete nasadit soubor Bicep, použijte:
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-before.bicep"
Úprava testu
Po dokončení nasazení můžete operaci citlivostní analýzy otestovat. Tentokrát nasadíte soubor Bicep, který změní virtuální síť. Chybí jedna z původních značek, byla odebrána podsíť a změnila se předpona adresy. Stáhněte si kopii souboru Bicep.
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'
}
}
]
}
}
Pokud chcete zobrazit změny, použijte:
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-after.bicep"
Výstup citlivostní analýzy bude vypadat asi takto:
Textový výstup je:
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.
Všimněte si, že v horní části výstupu jsou definované barvy, které označují typ změn.
V dolní části výstupu se zobrazuje značka Vlastník byl odstraněn. Předpona adresy se změnila z 10.0.0.0/16 na 10.0.0.0/15. Podsíť s názvem subnet001 byla odstraněna. Nezapomeňte, že tyto změny nebyly nasazeny. Zobrazí se náhled změn, ke kterým dojde, když nasadíte soubor Bicep.
Některé vlastnosti, které jsou uvedené jako odstraněné, se ve skutečnosti nezmění. Vlastnosti se můžou nesprávně hlásit jako odstraněné, pokud nejsou v souboru Bicep, ale automaticky se nastaví během nasazení jako výchozí hodnoty. Tento výsledek se v odpovědi citlivostní analýzy považuje za šum. Konečný nasazený prostředek bude mít nastavené hodnoty pro vlastnosti. Jakmile operace citlivostní analýzy zraje, budou tyto vlastnosti odfiltrovány z výsledku.
Vyhodnocení výsledků citlivostní analýzy prostřednictvím kódu programu
Teď vyhodnocujeme výsledky citlivostní analýzy programově nastavením příkazu na proměnnou.
$results = Get-AzResourceGroupDeploymentWhatIfResult `
-ResourceGroupName ExampleGroup `
--template-file "what-if-after.bicep"
Můžete zobrazit souhrn jednotlivých změn.
foreach ($change in $results.Changes)
{
$change.Delta
}
Potvrzení odstranění
Pokud chcete zobrazit náhled změn před nasazením souboru Bicep, použijte parametr confirm switch s příkazem nasazení. Pokud jsou změny podle očekávání, odpovězte, že chcete, aby se nasazení dokončilo.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Confirm `
-TemplateFile "what-if-after.bicep"
Textový výstup je:
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"):
Zobrazí se očekávané změny a můžete potvrdit, že chcete nasazení spustit.
Vyčištění prostředků
Pokud už ukázkové prostředky nepotřebujete, odstraňte skupinu prostředků pomocí Azure CLI nebo Azure PowerShell.
az group delete --name ExampleGroup
Sady SDK
Operaci citlivostní analýzy můžete použít prostřednictvím sad Azure SDK.
Pro Python použijte what-if.
Pro Javu použijte DeploymentWhatIf – třída.
Pro .NET použijte DeploymentWhatIf – třída.
Další kroky
- Pokud chcete použít operaci citlivostní analýzy v kanálu, přečtěte si téma Testování šablon ARM s What-If v kanálu.
- Pokud si všimnete nesprávných výsledků operace citlivostní analýzy, nahlaste problémy na adrese https://aka.ms/whatifissues.
- Modul Learn, který demonstruje použití citlivostní analýzy, najdete v tématu Náhled změn a ověření prostředků Azure pomocí what-if a testovací sady nástrojů šablon ARM.