Předpovědět, jaké bude mít nasazení účinky pomocí analýzy "co kdyby"

Dokončeno

Každý, kdo nasazuje nebo upravuje prostředky v prostředí, má na mysli tyto otázky:

  • Můžu něco porušit?
  • Něco odstraním?
  • Jak toto nasazení ovlivní existující prostředky?
  • Mohu ověřit, že to, co očekávám, je skutečně to, co se stane při nasazení, než stisknu tlačítko nasazení?

Nasazení strategie a naděje na to nejlepší není správný přístup. Lepším přístupem je použití hypotetické operace. Tato operace vám pomůže předvídat důsledky nového nasazení, pokud se o to pokusíte.

Azure Resource Manager poskytuje operaci typu "co když", která při nasazování šablony zvýrazní změny. Simulační operace neprovádí žádné změny stávajících prostředků. Místo toho předpovídá změny, pokud je zadaná šablona nasazená na úrovni skupiny prostředků a předplatného.

Poznámka

Operace "co kdyby" někdy ukazuje, že se zdroj změní, i když ve skutečnosti k žádné změně nedojde. Pracujeme na omezení těchto problémů, ale potřebujeme vaši pomoc. oznamte tyto problémy.

Pomocí operace Co když porovnáte aktuální stavový model s modelem požadovaného stavu. Operace co kdyby potvrdí, jestli změny provedené vaší šablonou odpovídají vašim očekáváním, bez aplikace těchto změn na skutečné prostředky nebo na stav těchto prostředků.

Řízení formátu výsledků analýzy 'co kdyby'

Cmdlet New-AzResourceGroupDeployment Azure PowerShell vytvoří nové nasazení do skupiny prostředků. Když do tohoto příkazu přidáte parametr -Whatif, příkaz se přepne z provádění nasazení na pouhé vytvoření přehledu o tom, co se stane, pokud ho provedete.

Příkaz az deployment group what-if vám poskytne náhled toho, co se stane, když provedete nasazení.

Velikost textového výstupu operace typu 'co kdyby' můžete ovládat pomocí jednoho z těchto formátů výsledků:

  • FullResourcePayloads. Zahrnutím tohoto parametru získáte podrobný výstup, který se skládá ze seznamu prostředků, které se změní. Výstup také zobrazuje podrobnosti o všech vlastnostech, které se změní v souladu se šablonou.
  • ResourceIdOnly. Tento režim vrátí seznam prostředků, které se změní, ale ne všechny podrobnosti.

Předpokládejme například, že měníte typ úložiště v šabloně, která nasadí jeden účet úložiště do existujícího prostředí.

Můžete spustit následující kód PowerShellu a požádat Správce prostředků, aby vám dal úplné datové objekty prostředků.

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format FullResourcePayloads

Předchozí příkaz vytvoří následující výsledky:

Resource and property changes are indicated with this symbol:
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
    ~ sku.name: "Standard_LRS" => "Standard_GRS"

Resource changes: 1 to modify.

Pak můžete příkaz znovu spustit, ale stačí požádat o ID prostředků:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format ResourceIdOnly

Předchozí příkaz vytvoří následující výsledky:

Resource and property changes are indicated with this symbol:
  ! Deploy

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Typy změn, které zjistí analýza 'co kdyby'

Když provedete operaci 'co-kdyby', uvádí šest typů změn:

Typ Vysvětlení Účinek
Vytvářet Prostředek aktuálně neexistuje, ale je definován v šabloně. Prostředek bude vytvořen.
Vymazat Tento typ změny platí jenom v případě, že pro nasazení používáte úplný režim. Prostředek existuje, ale není definován v šabloně. Pokud nasadíte pomocí přírůstkového režimu, prostředek se neodstraní. Pokud nasadíte pomocí úplného režimu, prostředek se odstraní. Tento typ změny se vrátí pouze pro prostředky, které podporují odstranění v úplném režimu.
Ignorovat Prostředek existuje, ale není definován v šabloně. Pokud používáte přírůstkový režim, což je výchozí režim nasazení, prostředek se nenasadí ani nezmění. Pokud nasadíte pomocí úplného režimu, prostředek se odstraní.
Bez změny 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 formát výsledku nastaven na FullResourcePayloads, což je výchozí formát výsledku.
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ž je formát výsledku nastaven na FullResourcePayloads, což je výchozí formát výsledku.
Nasadit Prostředek existuje a je definován v šabloně. Prostředek se znovu nasadí. Vlastnosti prostředku se můžou nebo nemusí změnit. Operace vrátí tento typ změny, pokud nemá dostatek informací k určení, jestli se změní nějaké vlastnosti. Tato podmínka se zobrazí pouze v případě, že je formát výsledku nastavený na ResourceIdOnly.

Pokud nepotřebujete znát všechny typy změn, můžete pomocí argumentu -WhatIfExcludeChangeType vynechat typy, které vás zajímají.

Pokud nepotřebujete znát všechny typy změn, můžete pomocí argumentu --what-if-exclude-change-types vynechat typy, které vás zajímají.

Použijte výsledky hypotetických analýz ve skriptu.

Možná budete chtít použít výstup z operace "co když" v rámci skriptu nebo jako součást procesu automatizovaného nasazení.

Výsledky můžete získat pomocí příkazu Get-AzResourceGroupDeploymentWhatIfResult. Skript pak může analyzovat výsledky a provádět jakoukoli vlastní logiku, kterou budete potřebovat.

Nezpracované výsledky JSON můžete získat připojením argumentu --no-pretty-print k příkazu rozhraní příkazového řádku. Skript pak může analyzovat výsledky a provádět jakoukoli vlastní logiku, kterou budete potřebovat.

Režimy nasazení a odstranění prostředků

Při nasazování šablony existují časy, kdy chcete potvrdit odstranění prostředků. Za tímto účelem operace "co kdyby" bere v úvahu režim nasazení, který používáte. Pokud použijete úplný režim nasazení, Resource Manager nahlásí prostředky, které budou odstraněny, protože nejsou definované ve vašem nasazení.

Podívejme se na příklad šablony, která aktualizuje existující prostředek a je nasazena v úplném režimu.

diagram znázorňující typy změn pro tři prostředky, z nichž některé již existují.

Tady je vysvětlení toho, co se děje v tomto příkladu:

  • Šablona aktualizuje účet úložiště s názvem storage-1, který je již nasazený. SKU se mění z LRS na GRSa značka owner mění hodnotu na Team A. Hypotetický výstup zobrazuje změnu typu Modify pro tento prostředek.
  • Šablona vytváří nový účet služby Azure Cosmos DB s názvem cosmos-db-1, který ještě ve skupině prostředků neexistuje. Výstup typu co kdyby zobrazuje změnový typ Vytvořit pro tento prostředek.
  • Šablona neobsahuje logický server Azure SQL, který už ve skupině prostředků existuje. Vzhledem k tomu, že nasazení používá úplný režim, co-kdyby výstup zobrazuje Odstranit typ změny pro tento prostředek. Pokud by nasazení používalo přírůstkový režim místo úplného režimu, typ změny by byl místo toho Ignorovat.

Potvrzení nasazení

Pokud chcete zobrazit náhled změn před nasazením šablony, použijte parametr -Confirm s příkazem nasazení. Pokud jsou změny podle očekávání, potvrďte, že chcete dokončit nasazení.

Spropitné

Příkazy nasazení je vhodné spouštět pomocí přepínače -Confirm, zejména pokud nasazujete v úplném režimu. Pokud použijete přepínač -Confirm, můžete operaci zastavit, pokud se vám navrhované změny nelíbí.

Pokud chcete zobrazit náhled změn před nasazením šablony, použijte argument --confirm-with-what-if s příkazem nasazení. Pokud jsou změny podle očekávání, potvrďte, že chcete dokončit nasazení.

Spropitné

Příkazy nasazení je vhodné spouštět pomocí argumentu --confirm-with-what-if, zejména pokud nasazujete v úplném režimu. Pokud použijete přepínač --confirm-with-what-if, můžete operaci zastavit, pokud se vám navrhované změny nelíbí.