Przewidywanie skutków wdrożenia przy użyciu analizy co-jeżeli

Ukończone

Każdy, kto wdraża lub modyfikuje zasoby w środowisku, ma na uwadze takie pytania:

  • Czy mogę coś uszkodzić?
  • Czy mam zamiar coś usunąć?
  • Jak to wdrożenie wpłynie na istniejące zasoby?
  • Czy mogę sprawdzić, czy to, co się stanie, to co się stanie we wdrożeniu, zanim trafię na przycisk wdrażania?

Wdrażanie i nadzieję, że najlepsze rozwiązanie nie jest dobrym podejściem. Lepszym rozwiązaniem jest użycie operacji analizy co-jeżeli. Ta operacja pomaga przewidzieć konsekwencje nowego wdrożenia, jeśli podejmiesz próbę.

Usługa Azure Resource Manager oferuje operację analizy co-jeżeli, która umożliwia wyróżnienie zmian podczas wdrażania szablonu. Operacja warunkowa nie wprowadza żadnych zmian w istniejących zasobach. Zamiast tego przewiduje zmiany, jeśli określony szablon zostanie wdrożony na poziomie grupy zasobów i subskrypcji.

Uwaga

Operacja analizy co-jeżeli czasami pokazuje, że zasób zmieni się, gdy rzeczywiście nie nastąpi żadna zmiana. Pracujemy nad ograniczeniem tych problemów, ale potrzebujemy Twojej pomocy. Zgłoś te problemy.

Użycie operacji analizy warunkowej porównuje bieżący model stanu z modelem żądanego stanu. Operacja analizy co-jeżeli potwierdza, czy zmiany wprowadzone przez szablon są zgodne z oczekiwaniami bez stosowania tych zmian do rzeczywistych zasobów lub stanu tych zasobów.

Kontrolowanie formatu wyników analizy co-jeżeli

Polecenie New-AzResourceGroupDeployment cmdlet programu Azure PowerShell tworzy nowe wdrożenie w grupie zasobów. Po dodaniu parametru -Whatif do tego polecenia polecenie przełącza się z przeprowadzania wdrożenia w celu jedynie raportowania podglądu tego, co się stanie w przypadku jego przeprowadzenia.

Polecenie az deployment group what-if zapewnia podgląd tego, co się stanie, jeśli przeprowadzisz wdrożenie.

Możesz kontrolować ilość danych wyjściowych tekstu operacji analizy co-jeżeli przy użyciu jednego z następujących formatów wyników:

  • FullResourcePayloads. Dołączając ten parametr, uzyskasz pełne dane wyjściowe zawierające listę zasobów, które zostaną zmienione. Dane wyjściowe zawierają również szczegółowe informacje o wszystkich właściwościach, które zostaną zmienione zgodnie z szablonem.
  • ResourceIdOnly. Ten tryb zwraca listę zasobów, które zostaną zmienione, ale nie wszystkie szczegóły.

Na przykład załóżmy, że zmieniasz typ magazynu w szablonie, który wdraża jedno konto magazynu w istniejącym środowisku.

Możesz uruchomić następujący kod programu PowerShell i poprosić usługę Resource Manager o podanie pełnych ładunków zasobów:

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

Poprzednie polecenie generuje następujące wyniki:

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.

Następnie możesz ponownie uruchomić polecenie, ale po prostu poprosić o identyfikatory zasobów:

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

Poprzednie polecenie generuje następujące wyniki:

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 zmian wykrywanych przez co-jeżeli

Użycie operacji analizy co-jeżeli powoduje wyświetlenie sześciu typów zmian:

Typ Wyjaśnienie Efekt
Utworzenie Zasób nie istnieje, ale jest zdefiniowany w szablonie. Zasób zostanie utworzony.
Delete Ten typ zmiany stosuje się tylko w przypadku korzystania z trybu pełnego przy wdrażaniu. Zasób istnieje, ale nie jest zdefiniowany w szablonie. W przypadku wdrażania przy użyciu trybu przyrostowego zasób nie zostanie usunięty. Jeśli wdrażasz przy użyciu trybu pełnego, zasób zostanie usunięty. Ten typ zmiany jest zwracany tylko w przypadku zasobów, które obsługują usuwanie za pośrednictwem trybu pełnego.
Ignoruj Zasób istnieje, ale nie jest zdefiniowany w szablonie. W przypadku korzystania z trybu przyrostowego, który jest domyślnym trybem wdrażania, zasób nie jest wdrażany ani modyfikowany. W przypadku wdrożenia przy użyciu trybu pełnego zasób zostanie usunięty.
NoChange Zasób istnieje i jest zdefiniowany w szablonie. Zasób zostanie wdrożony ponownie, ale właściwości zasobu nie ulegną zmianie. Ten typ zmiany jest zwracany, gdy format wyniku jest ustawiony na FullResourcePayloads, czyli domyślny format wyniku.
Modyfikowanie Zasób istnieje i jest zdefiniowany w szablonie. Zasób zostanie wdrożony ponownie i właściwości zasobu ulegną zmianie. Ten typ zmiany jest zwracany, gdy format wyniku jest ustawiony na FullResourcePayloads, czyli domyślny format wyniku.
Wdrażaj Zasób istnieje i jest zdefiniowany w szablonie. Zasób zostanie wdrożony ponownie. Właściwości zasobu mogą, ale nie muszą ulec zmianie. Operacja zwraca ten typ zmiany, jeśli nie ma wystarczających informacji, aby określić, czy jakieś właściwości ulegną zmianie. Ten warunek jest wyświetlany tylko wtedy, gdy format wyniku jest ustawiony na ResourceIdOnlywartość .

Jeśli nie musisz znać wszystkich typów zmian, możesz użyć argumentu -WhatIfExcludeChangeType , aby pominąć typy, których nie interesujesz.

Jeśli nie musisz znać wszystkich typów zmian, możesz użyć argumentu --what-if-exclude-change-types , aby pominąć typy, których nie interesujesz.

Używanie wyników analizy co-jeżeli w skrycie

Możesz użyć danych wyjściowych z operacji analizy co-jeżeli w skrycie lub w ramach zautomatyzowanego procesu wdrażania.

Wyniki można uzyskać przy użyciu Get-AzResourceGroupDeploymentWhatIfResult polecenia cmdlet . Następnie skrypt może przeanalizować wyniki i wykonać dowolną logikę niestandardową, której potrzebujesz.

Nieprzetworzone wyniki JSON można uzyskać, dołączając argument do polecenia interfejsu --no-pretty-print wiersza polecenia. Następnie skrypt może przeanalizować wyniki i wykonać dowolną logikę niestandardową, której potrzebujesz.

Tryby wdrażania i usuwanie zasobów

Czasami chcesz potwierdzić usunięcie zasobów podczas wdrażania szablonu. W tym celu operacja analizy co-jeżeli jest używana w trybie wdrażania. Jeśli używasz trybu pełnego wdrażania, usługa Resource Manager zgłasza zasoby, które zostaną usunięte, ponieważ nie są zdefiniowane we wdrożeniu.

Przyjrzyjmy się przykładowi szablonu, który aktualizuje istniejący zasób i jest wdrażany w trybie pełnym:

Diagram showing change types for three resources, some of which already exist.

Oto wyjaśnienie tego, co dzieje się w tym przykładzie:

  • Szablon aktualizuje konto magazynu o nazwie storage-1, które zostało już wdrożone. Jednostka SKU zmienia się z LRS na GRS, a owner tag zmienia wartość na Team A. W danych wyjściowych analizy co-jeżeli jest wyświetlany typ zmiany Modyfikuj dla tego zasobu.
  • Szablon tworzy nowe konto usługi Azure Cosmos DB o nazwie cosmos-db-1, które jeszcze nie istnieje w grupie zasobów. Dane wyjściowe analizy co-jeżeli zawierają typ tworzenia zmiany dla tego zasobu.
  • Szablon nie zawiera serwera logicznego usługi Azure SQL, który już istnieje w grupie zasobów. Ponieważ wdrożenie korzysta z trybu pełnego, dane wyjściowe analizy co-jeżeli zawierają typ zmiany Usuń dla tego zasobu. Jeśli wdrożenie było używane w trybie przyrostowym zamiast trybu pełnego, zamiast tego typ zmiany to Ignoruj .

Potwierdzanie wdrożeń

Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj -Confirm parametru z poleceniem wdrożenia. Jeśli zmiany są zgodne z oczekiwaniami, potwierdź, że wdrożenie ma zostać ukończone.

Napiwek

Dobrym pomysłem jest uruchomienie poleceń wdrażania za pomocą przełącznika -Confirm , zwłaszcza w przypadku wdrażania w trybie pełnym. Jeśli używasz przełącznika -Confirm , możesz zatrzymać operację, jeśli nie podobają ci się proponowane zmiany.

Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj --confirm-with-what-if argumentu z poleceniem wdrożenia. Jeśli zmiany są zgodne z oczekiwaniami, potwierdź, że wdrożenie ma zostać ukończone.

Napiwek

Dobrym pomysłem jest uruchomienie poleceń wdrażania z argumentem --confirm-with-what-if , zwłaszcza jeśli wdrażasz w trybie pełnym. Jeśli używasz przełącznika --confirm-with-what-if , możesz zatrzymać operację, jeśli nie podobają ci się proponowane zmiany.