Operace what-if (what-if) nasazení Bicep

Před nasazením souboru Bicep 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, když 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 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 operaci what-if (what-if) a pokyny najdete v tématu o změnách nasazení Azure ve verzi Preview pomocí operace what-if (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.

Operace what-if pro nasazení Bicep fullresourcepayload a změna typů

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ž nasadíte soubor Bicep, 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 souboru Bicep, 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 souboru Bicep, 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 pro az deployment group what-if --no-pretty-print 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 souboru Bicep. Prostředek se vytvoří.
  • Odstranit: Tento typ změny se použije 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í odstranění v úplném režimu.
  • Ignore( Ignorovat): Prostředek existuje, ale není definovaný v souboru Bicep. Prostředek se nebude nasazovat ani upravovat.
  • 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.
  • Modify: 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.
  • Nasadit: 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 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 soubor Bicep, 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). 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'
        }
      }
    ]
  }
}

K nasazení souboru Bicep použijte:

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile "what-if-before.bicep"

Úprava testu

Po dokončení nasazení jste připraveni otestovat operaci what-if (what-if). Tentokrát nasadíte soubor Bicep, který změní virtuální síť. Chybí původní značka, odebrala se podsíť a předpona adresy se změnila. 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:

Výstup operace what-if (operace what-if) nasazení 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.

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ž nasadíte soubor Bicep.

Některé vlastnosti, které jsou uvedené jako odstraněné, se ve skutečnosti nezmění. Pokud vlastnosti nejsou v souboru Bicep, mohou být nesprávně hlášeny jako odstraněné, ale při nasazení se automaticky nastaví 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 zkušuje, budou tyto vlastnosti vyfiltrovány z výsledku.

Vyhodnocení výsledků what-if prostřednictvím kódu programu

Teď naprogramujeme výsledky what-if (what-if) nastavením příkazu na proměnnou.

$results = Get-AzResourceGroupDeploymentWhatIfResult `
  -ResourceGroupName ExampleGroup `
  --template-file "what-if-after.bicep"

Zobrazí se souhrn každé změny.

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 pomocí příkazu nasazení. Pokud jsou změny podle očekávání, odpovězte, že chcete nasazení dokončit.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Confirm `
  -TemplateFile "what-if-after.bicep"

Dokončení režimu nasazení výstupu operace what-if pro nasazení 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ž nepotřebujete příklady prostředků, pomocí Azure CLI nebo Azure PowerShell odstraňte skupinu prostředků.

az group delete --name ExampleGroup

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.