Sdílet prostřednictvím


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

Před nasazením šablony Azure Resource Manageru (šablona ARM) můžete zobrazit náhled změn, ke kterým dojde. Azure Resource Manager poskytuje operaci citlivostní analýza, která vám umožní zjistit, jak se prostředky změní, když šablonu nasadíte. 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í operace můžete použít s operacemi Azure PowerShellu, Azure CLI nebo rozhraní REST API. What-if is supported for resource group, subscription, management group, and tenant level deployments.

Školicí materiály

Další informace o citlivosti a praktické pokyny najdete v tématu Preview změn nasazení Azure pomocí citlivostní citlivosti.

Požadována 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. Pokud chcete například nasadit virtuální počítač, potřebujete Microsoft.Compute/virtualMachines/write a Microsoft.Resources/deployments/* oprávnění. Operace citlivostní operace má stejné požadavky na oprávnění.

Seznam rolí a oprávnění najdete v tématu Předdefinované role Azure.

Limity citlivostní citlivosti

Citlivostní analýza rozbalí vnořené šablony, dokud nedosáhnete těchto limitů:

  • 500 vnořených šablon.
  • 800 skupin prostředků v nasazení mezi skupinami prostředků.
  • Rozšíření vnořených šablon trvalo 5 minut.

Po dosažení jednoho z limitů je typ změny zbývajících prostředků nastavený na Ignorovat.

Instalace modulu Azure PowerShellu

Pokud chcete v PowerShellu použít citlivostní dotaz, musíte mít verzi 4.2 nebo novější modulu Az.

K instalaci modulu použijte:

Install-Module -Name Az -Force

Další informace o instalaci modulů najdete v tématu Instalace Azure PowerShellu.

Instalace modulu Azure CLI

Pokud chcete použít citlivostní dotaz 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ž v PowerShellu nebo Azure CLI použijete citlivostní analýzy, výstup obsahuje barevně kódované výsledky, které vám pomůžou zobrazit různé typy změn.

Snímek obrazovky s operací citlivostní operace nasazení šablon Resource Manageru 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í operace nemůže vyřešit referenční funkci. Pokaždé, když nastavíte vlastnost na výraz šablony, který obsahuje referenční funkci, se změní citlivostní sestava vlastnosti. K tomuto chování dochází, protože citlivostní analýza 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í citlivosti

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. Chcete-li získat objekt, který můžete programově zkontrolovat změny, použijte 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 formuláře-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:

Můžete například použít az deployment group create --confirm-with-what-if nebo -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ě zkontrolovat změny, použijte --no-pretty-print přepínač. Můžete například použít 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 rozhraní REST API použijte:

Typy změn

Operace citlivostní analýza obsahuje sedm různých typů změn:

  • Vytvoření: Prostředek aktuálně neexistuje, ale je definován v šabloně. Prostředek se vytvoří.
  • Odstranit: Tento typ změny platí jenom v případě, že pro nasazení používáte úplný režim . Prostředek existuje, ale není v šabloně definovaný. V úplném režimu se prostředek odstraní. V tomto typu změny jsou zahrnuté jenom prostředky, které podporují odstranění v úplném režimu.
  • 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, setkáte se s tímto typem změn. Podívejte se na limity citlivostní citlivosti.
  • 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ž je ResultFormat nastavena na FullResourcePayloads, což je výchozí hodnota.
  • NoEffect: Vlastnost je pouze připravena a bude ignorována službou. Například vlastnost je vždy nastavena tak, sku.tier aby odpovídala sku.name Microsoft.ServiceBus v oboru názvů.
  • Úprava: 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ž je ResultFormat nastavena na FullResourcePayloads, což je výchozí hodnota.
  • Nasazení: Prostředek existuje a je definován 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 je vlastnost ResultFormat nastavena na ResourceIdOnlyhodnotu .

Formát výsledku

Řídíte úroveň podrobností, která se vrátí o předpovídané změny. K dispozici jsou 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 programových příkazech objektu ResultFormat použijte 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í operace

Nastavení prostředí

Abychom viděli, jak citlivost funguje, spustíme některé testy. Nejprve nasaďte šablonu, která vytvoří virtuální síť. Pomocí této virtuální sítě otestujete, jak se změny hlásí citlivostní analýza.

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í jste připraveni otestovat operaci citlivostní analýza. Tentokrát nasadíte šablonu, která změní virtuální síť. Chybí jedna z původních značek, 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:

Snímek obrazovky s výstupem operace citlivostní operace nasazení Resource Manageru s informacemi o změnách

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 v horní části výstupu, že barvy jsou definované tak, aby označily typ změn.

V dolní části výstupu se zobrazí odstranění značky 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 uvedeny 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 automaticky se nastaví během nasazení jako výchozí hodnoty. Tento výsledek se v odpovědi citlivostní analýza považuje za šum. Poslední nasazený prostředek bude mít nastavené hodnoty pro vlastnosti. Jak se operace citlivostní analýzy zralá, tyto vlastnosti se vyfiltrují z výsledku.

Vyhodnocení výsledků citlivostní citlivosti prostřednictvím kódu programu

Teď programově vyhodnotíme výsledky citlivostní citlivosti 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
}

Potvrdit odstranění

Operace citlivostní analýzy podporuje použití režimu nasazení. Pokud je nastaven 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 definovány žádné prostředky a režim nasazení je nastavený na dokončení, virtuální síť se odstraní.

Snímek obrazovky s výstupem operace citlivostní operace nasazení Resource Manageru 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 má být nasazení spuštěné.

Sady SDK

Operaci citlivostní operace můžete použít prostřednictvím sad SDK Azure.

Další kroky