Operace what-if (citlivostní analýza) při nasazení šablony ARM

Před nasazením šablony Azure Resource Manager (šablony ARM) si můžete zobrazit náhled změn, ke kterým dojde. Azure Resource Manager poskytuje operaci citlivostní analýzy, která vám umožní zjistit, jak se při nasazení šablony změní prostředky. 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 citlivostní analýzy 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.

Školicí materiály

Další informace o citlivosti a praktické pokyny najdete v tématu Změny nasazení Azure ve verzi Preview pomocí what-if.

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 citlivostní analýzy 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 rozbalí vnořené šablony, dokud nebudou dosažena tato omezení:

  • 500 vnořených šablon.
  • 800 skupin prostředků v nasazení mezi skupinami prostředků.
  • Rozšíření 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 použít 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.

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.

Snímek obrazovky s operací citlivostní analýzy nasazení Resource Manager šablony s úplnou datovou částí prostředku a 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 citlivostní analýzy nemůže přeložit referenční funkci. Pokaždé, když nastavíte vlastnost výrazu šablony, který obsahuje odkazovou funkci, se funkce what-if hlásí, že se vlastnost změní. K tomuto chování dochází, protože funkce 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. Při nasazení šablony se vlastnost 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 zobrazit náhled změn před nasazením šablony, použijte rutinu New-AzResourceGroupDeployment nebo New-AzSubscriptionDeployment. -Whatif Přidejte parametr switch do příkazu nasazení.

  • New-AzResourceGroupDeployment -Whatif pro nasazení skupin prostředků

  • New-AzSubscriptionDeployment -Whatif a New-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 a New-AzDeployment -Confirm pro 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 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 šablony, použijte:

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:

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ý 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 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:

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 šabloně. Prostředek se vytvoří.
  • Odstranit: Tento typ změny platí jenom při použití režimu úplného nasazení. Prostředek existuje, ale není v šabloně definovaný. V úplném režimu se prostředek odstraní. Do tohoto typu změny jsou zahrnuty pouze prostředky, které podporují úplné odstranění .
  • Ignorovat: Prostředek existuje, ale není definován v šabloně. 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 definován v šabloně. Prostředek se znovu nasadí, ale vlastnosti prostředku se nezmění. Tento typ změny se vrátí, když resultFormat je nastaven na FullResourcePayloads, což je výchozí hodnota.
  • NoEffect: Vlastnost je jen pro připraveno a služba ji bude ignorovat. Například vlastnost je vždy nastavená tak, sku.tier aby odpovídala sku.nameMicrosoft.ServiceBus v oboru názvů.
  • Upravit: Prostředek existuje a je definován v šabloně. Prostředek se znovu nasadí a vlastnosti prostředku se změní. Tento typ změny se vrátí, když resultFormat je 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í jenom v případě, že je ResultFormat nastavený na ResourceIdOnly.

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í

Abychom viděli, jak citlivostní analýzy funguje, spustíme několik testů. Nejprve nasaďte šablonu, která vytvoří virtuální síť. Pomocí této virtuální sítě otestujete, jak what-if hlásí změny.

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"

Testovací úprava

Po dokončení nasazení můžete operaci what-if otestovat. Tentokrát nasadíte šablonu, 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.

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:

Snímek obrazovky s výstupem operace citlivostní analýzy nasazení šablony Resource Manager zobrazující změny

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 je vidět, že se odstranila značka Vlastník. 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ž šablonu nasadíte.

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é, když nejsou v šabloně, ale během nasazení se automaticky nastaví 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 vlastností. S tím, jak 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ď výsledky citlivostní analýzy vyhodnotíme programově 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"

Můžete se podívat na souhrn každé změny.

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

Potvrzení odstranění

Operace what-if podporuje použití režimu nasazení. Pokud je nastavený režim úplného 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, aby se nasazení dokončilo.

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

Snímek obrazovky s Resource Manager dokončení operace citlivostní analýzy nasazení šablony v režimu nasazení

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 sad Azure SDK.

Další kroky