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.

Resource Manager šablony what-if operation fullresourcepayload a change types

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 -Whatif pro nasazení skupin prostředků
  • New-AzSubscriptionDeployment -Whatif a New-AzDeployment -Whatif pro 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 -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 příkaz 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) 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:

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:

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:

Resource Manager výstupu operace what-if (operace what-if) nasazení šablony

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

Resource Manager dokončení nasazení šablony what-if operation output deployment

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.

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.