Operace what-if (citlivostní analýza) při nasazení šablony ARM
Před nasazením šablony Azure Resource Manager (šablona ARM) můžete zobrazit náhled změn, ke které dojde. Azure Resource Manager poskytuje operaci what-if (what-if), která vám umožní zobrazit, jak se změní prostředky při nasazení šablony. Operace what-if neprovede žádné změny stávajících prostředků. Místo toho předpoví změny, k nimž by došlo při nasazení zadané šablony.
Operaci what-if můžete použít s Azure PowerShell, Azure CLI nebo REST API operacemi. Funkce what-if je podporovaná pro nasazení na úrovni skupiny prostředků, předplatného, skupiny pro správu a tenanta.
Microsoft Learn
Další informace o what-if a pokyny najdete v článku o změnách nasazení Azure ve verzi Preview pomocí funkce what-if na Microsoft Learn.
Instalace Azure PowerShell
Pokud chcete používat what-if v PowerShellu, 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 používat what-if v Azure CLI, musíte mít Azure CLI 2.14.0 nebo novější. V případě potřeby si nainstalujte nejnovější verzi Azure CLI.
Zobrazení výsledků
Když v PowerShellu nebo Azure CLI použijete what-if (what-if), výstup bude obsahovat barevně odlišené 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 referenční funkci vyřešit. Pokaždé, když nastavíte vlastnost na výraz šablony, který obsahuje referenční funkci, se vlastnost "what-if reports" změní. K tomuto chování dochází, protože what-if porovnává aktuální hodnotu vlastnosti (například nebo pro logickou hodnotu) s nevyřešeným true false výrazem šablony. Tyto hodnoty se samozřejmě nebudou shodovat. Když šablonu nasadíte, vlastnost se změní pouze v případě, že se výraz šablony překládá na jinou hodnotu.
Příkazy what-if
Azure PowerShell
Pokud chcete zobrazit náhled změn před nasazením šablony, použijte New-AzResourceGroupDeployment nebo New-AzSubscriptionDeployment. Do příkazu -Whatif nasazení přidejte parametr switch.
New-AzResourceGroupDeployment -Whatifpro nasazení skupin prostředkůNew-AzSubscriptionDeployment -WhatifaNew-AzDeployment -Whatifpro nasazení na úrovni předplatného
Pomocí parametru switch můžete zobrazit náhled změn a zobrazit výzvu -Confirm k pokračování v nasazení.
New-AzResourceGroupDeployment -Confirmpro nasazení skupin prostředkůNew-AzSubscriptionDeployment -ConfirmaNew-AzDeployment -Confirmpro nasazení na úrovni předplatného
Předchozí příkazy vrátí textový souhrn, který můžete ručně zkontrolovat. Pokud chcete získat objekt, který můžete programově kontrolovat změny, použijte příkaz Get-AzResourceGroupDeploymentWhatIfResult nebo Get-AzSubscriptionDeploymentWhatIfResult.
$results = Get-AzResourceGroupDeploymentWhatIfResultpro nasazení skupin prostředků$results = Get-AzSubscriptionDeploymentWhatIfResultnebo$results = Get-AzDeploymentWhatIfResultpro nasazení na úrovni předplatného
Azure CLI
Pokud chcete zobrazit náhled změn před nasazením šablony, použijte:
- az deployment group what-if pro nasazení skupin prostředků
- az deployment sub what-if for subscription level deployments
- 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 formuláře) můžete zobrazit náhled změn a zobrazit výzvu k --confirm-with-what-if -c 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
Použijte například nebo az deployment group create --confirm-with-what-if -c pro nasazení skupin prostředků.
Předchozí příkazy vrátí textový souhrn, který můžete ručně zkontrolovat. Pokud chcete získat objekt JSON, který můžete programově kontrolovat změny, použijte --no-pretty-print přepínač . Použijte například az deployment group what-if --no-pretty-print 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 REST API použijte:
- Nasazení – What If pro nasazení skupin prostředků
- Nasazení – What If v oboru předplatného pro nasazení předplatných
- Nasazení – What If v oboru skupiny pro správu pro nasazení skupin pro správu
- Nasazení – What If v oboru tenanta pro nasazení tenantů.
Typy změn
Operace what-if uvádí šest různých typů změn:
Vytvořit: Prostředek aktuálně neexistuje, ale je definovaný v šabloně. Prostředek se vytvoří.
Odstranit: Tento typ změny se použije jenom při použití úplného režimu pro nasazení. Prostředek existuje, ale není v šabloně definovaný. V úplném režimu se prostředek odstraní. Tento typ změny zahrnuje pouze prostředky, které podporují odstranění v úplném režimu.
Ignore: Prostředek existuje, ale není v šabloně definovaný. Prostředek se nebude nasazovat ani upravovat.
NoChange: Prostředek existuje a je definovaný v šabloně. 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.Modify: Prostředek existuje a je definovaný v šabloně. 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 šabloně. 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 resultFormat je nastavený na
ResourceIdOnly.
Formát výsledku
Řídíte úroveň podrobností vrácených 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 použijte -WhatIfResultFormat parametr . V programových objektových příkazech použijte ResultFormat parametr .
V případě 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 what-if
Nastavení prostředí
Pokud se chcete podívat, jak funguje what-if (co kdyby), spustíme několik testů. Nejprve nasaďte šablonu, která vytvoří virtuální síť. Tuto virtuální síť použijete k otestování toho, jak se změny hlásí pomocí what-if (what-if).
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"
Úprava testu
Po dokončení nasazení jste připraveni otestovat operaci what-if (what-if). Tentokrát nasadíte šablonu, která změní virtuální síť. Chybí původní značka, odebrala se podsíť a předpona adresy se změnila.
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"
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.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 zobrazí značka Owner was deleted (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 se odstranila. Mějte na paměti, že tyto změny nebyly nasazeny. Zobrazí se náhled změn, ke které dojde, když šablonu nasadíte.
Některé vlastnosti, které jsou uvedené jako odstraněné, se ve skutečnosti nezmění. Vlastnosti mohou být nesprávně hlášeny jako odstraněné, pokud nejsou v šabloně, ale jsou automaticky nastaveny během nasazení jako výchozí hodnoty. Tento výsledek se v odpovědi citlivostní citlivostní funkce považuje za "šum". Konečný nasazený prostředek bude mít nastavené hodnoty vlastností. S tím, jak se operace what-if vyzná, budou tyto vlastnosti vyfiltrovány z výsledku.
Vyhodnocení výsledků what-if prostřednictvím kódu programu
Teď programově vyhodnotíme výsledky what-if nastavením příkazu na proměnnou.
$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"
Zobrazí se souhrn každé změny.
foreach ($change in $results.Changes)
{
$change.Delta
}
Potvrzení odstranění
Operace what-if podporuje použití režimu nasazení. Když nastavíte režim dokončení, prostředky, které nejsou v šabloně, se odstraní. Následující příklad nasadí šablonu, která nemá žádné prostředky definované v úplném režimu.
Pokud chcete zobrazit náhled změn před nasazením šablony, použijte v příkazu pro nasazení parametr confirm switch. Pokud jsou změny podle očekávání, odpovězte, že chcete nasazení dokončit.
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"
Vzhledem k tomu, že v šabloně nejsou definované žádné prostředky a režim nasazení je nastavený na dokončení, virtuální síť se odstraní.

Textový výstup je:
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"):
Zobrazí se očekávané změny a můžete potvrdit, že chcete nasazení spustit.
Sady SDK
Operaci what-if můžete použít prostřednictvím azure SDK.
Pro Python použijte what-if.
Pro Javu použijte třídu DeploymentWhatIf.
Pro .NET použijte třídu DeploymentWhatIf.
Další kroky
- Informace o použití operace what-if v kanálu najdete v tématu Testování šablon ARM What-If v kanálu.
- Pokud si všimnete nesprávných výsledků operace what-if, nahlásit problémy na adrese https://aka.ms/whatifissues .
- Modul azure Microsoft Learn, který se zabývá používáním funkce What If, najdete v tématu Náhled změn a ověření prostředků Azure pomocí what-if (what-if)a testovací sady nástrojů pro šablony ARM.