Operacja analizy co-jeżeli wdrożenia szablonu usługi Resource Manager

Przed wdrożeniem szablonu Azure Resource Manager (szablonu USŁUGI ARM) możesz wyświetlić podgląd zmian, które nastąpią. Azure Resource Manager udostępnia operację what-if, aby zobaczyć, jak zasoby zmienią się w przypadku wdrożenia szablonu. Operacja warunkowa nie wprowadza żadnych zmian w istniejących zasobach. Zamiast tego przewiduje zmiany w przypadku wdrożenia określonego szablonu.

Operacji what-if można użyć w przypadku operacji Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub interfejsu API REST. What-if is supported for resource group, subscription, management group, and tenant level deployments (Co jeśli jest obsługiwane w przypadku wdrożeń na poziomie grupy zasobów, subskrypcji, grupy zarządzania i dzierżawy).

Instalowanie Azure PowerShell modułu

Aby użyć funkcji what-if w programie PowerShell, musisz mieć wersję 4.2 lub nowszą modułu Az.

Aby zainstalować moduł, użyj:

Install-Module -Name Az -Force

Aby uzyskać więcej informacji na temat instalowania modułów, zobacz Instalowanie Azure PowerShell.

Instalowanie modułu interfejsu wiersza polecenia platformy Azure

Aby użyć funkcji what-if w interfejsie wiersza polecenia platformy Azure, musisz mieć interfejs wiersza polecenia platformy Azure w wersji 2.14.0 lub nowszej. W razie potrzeby zainstaluj najnowszą wersję interfejsu wiersza polecenia platformy Azure.

Wyświetlanie wyników

Jeśli używasz analizy what-if w programie PowerShell lub interfejsie wiersza polecenia platformy Azure, dane wyjściowe zawierają zakodowane kolorami wyniki, które ułatwiają wyświetlanie różnych typów zmian.

Resource Manager szablonu operacji what-if fullresourcepayload i zmień typy

Dane wyjściowe tekstu to:

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.

Uwaga

Operacja what-if nie może rozpoznać funkcji odwołania. Za każdym razem, gdy ustawisz właściwość na wyrażenie szablonu, które zawiera funkcję odwołania, raporty what-if zmienią się. To zachowanie występuje, ponieważ wyrażenie what-if porównuje bieżącą wartość właściwości (na przykład lub dla wartości logicznych) z nierozpoznaną true false wartością wyrażenia szablonu. Oczywiście te wartości nie będą zgodne. Podczas wdrażania szablonu właściwość zmieni się tylko wtedy, gdy wyrażenie szablonu zostanie rozwiązane z inną wartością.

Polecenia what-if

Azure PowerShell

Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj new-AzResourceGroupDeployment lub New-AzSubscriptionDeployment. Dodaj parametr -Whatif switch do polecenia wdrożenia.

  • New-AzResourceGroupDeployment -Whatif w przypadku wdrożeń grup zasobów
  • New-AzSubscriptionDeployment -Whatif i New-AzDeployment -Whatif dla wdrożeń na poziomie subskrypcji

Możesz użyć parametru switch, aby wyświetlić podgląd zmian i -Confirm wyświetlić monit o kontynuowanie wdrażania.

  • New-AzResourceGroupDeployment -Confirm w przypadku wdrożeń grup zasobów
  • New-AzSubscriptionDeployment -Confirm i New-AzDeployment -Confirm dla wdrożeń na poziomie subskrypcji

Poprzednie polecenia zwracają podsumowanie tekstu, które można ręcznie sprawdzić. Aby uzyskać obiekt, który można programowo sprawdzić pod celu sprawdzenia zmian, użyj get-AzResourceGroupDeploymentWhatIfResult lub Get-AzSubscriptionDeploymentWhatIfResult.

  • $results = Get-AzResourceGroupDeploymentWhatIfResult w przypadku wdrożeń grup zasobów
  • $results = Get-AzSubscriptionDeploymentWhatIfResult lub $results = Get-AzDeploymentWhatIfResult w przypadku wdrożeń na poziomie subskrypcji

Interfejs wiersza polecenia platformy Azure

Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj:

Możesz użyć przełącznika (lub jego krótkiej formy ), aby wyświetlić podgląd zmian i wyświetlić monit o --confirm-with-what-if -c kontynuowanie wdrażania. Dodaj ten przełącznik do:

Na przykład użyj lub az deployment group create --confirm-with-what-if -c dla wdrożeń grupy zasobów.

Poprzednie polecenia zwracają podsumowanie tekstu, które można ręcznie sprawdzić. Aby uzyskać obiekt JSON, który można programowo sprawdzić pod względu na zmiany, użyj --no-pretty-print przełącznika . Na przykład użyj programu az deployment group what-if --no-pretty-print w przypadku wdrożeń grup zasobów.

Jeśli chcesz zwrócić wyniki bez kolorów, otwórz plik konfiguracji interfejsu wiersza polecenia platformy Azure. Ustaw no_color tak.

Interfejs API REST platformy Azure

W przypadku interfejsu API REST użyj:

Typy zmian

Operacja what-if zawiera sześć różnych typów zmian:

  • Utwórz: zasób nie istnieje obecnie, ale jest zdefiniowany w szablonie. Zasób zostanie utworzony.

  • Usuń: ten typ zmiany ma zastosowanie tylko w przypadku używania trybu pełnego do wdrożenia. Zasób istnieje, ale nie jest zdefiniowany w szablonie. W przypadku trybu pełnego zasób zostanie usunięty. Ten typ zmiany obejmuje tylko zasoby, które obsługują usuwanie w trybie kompletnym.

  • Ignoruj: zasób istnieje, ale nie jest zdefiniowany w szablonie. Zasób nie zostanie wdrożony ani zmodyfikowany.

  • 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 dla właściwości ResultFormat ustawiono wartość FullResourcePayloads , która jest wartością domyślną.

  • Modyfikuj: 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 dla właściwości ResultFormat ustawiono wartość FullResourcePayloads , która jest wartością domyślną.

  • Wdrażanie: 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świetlony tylko wtedy, gdy dla opcji ResultFormat ustawiono wartość ResourceIdOnly .

Format wyniku

Możesz kontrolować poziom szczegółowości zwracanych informacji o przewidywanych zmianach. Dostępne są dwie opcje:

  • FullResourcePayloads — zwraca listę zasobów, które zostaną zmieniane, oraz szczegółowe informacje o właściwościach, które zostaną zmieniane
  • ResourceIdOnly — zwraca listę zasobów, które zmienią się

Wartość domyślna to FullResourcePayloads.

W przypadku poleceń wdrażania programu PowerShell użyj -WhatIfResultFormat parametru . W poleceniach obiektu programowego użyj ResultFormat parametru .

W przypadku interfejsu wiersza polecenia platformy Azure użyj --result-format parametru .

Następujące wyniki pokazują dwa różne formaty danych wyjściowych:

  • Pełne ładunki zasobów

    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.
    
  • Tylko identyfikator zasobu

    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.
    

Uruchamianie operacji what-if

Konfigurowanie środowiska

Aby sprawdzić, jak działa działanie what-if, uruchomimy kilka testów. Najpierw należy wdrożyć szablon, który tworzy sieć wirtualną. Użyjesz tej sieci wirtualnej, aby przetestować sposób, w jaki zmiany są zgłaszane przez usługę 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"

Modyfikacja testu

Po zakończeniu wdrażania możesz przetestować operację what-if. Tym razem wdrożysz szablon, który zmienia sieć wirtualną. Brakuje jednego z oryginalnych tagów, usunięto podsieć i zmieniono prefiks adresu.

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"

Dane wyjściowe operacji what-if wyświetlane są podobnie do następujących:

Resource Manager danych wyjściowych operacji what-if wdrożenia szablonu

Dane wyjściowe tekstu to:

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.

Zwróć uwagę, że w górnej części danych wyjściowych zdefiniowano kolory wskazujące typ zmian.

W dolnej części danych wyjściowych widać, że tag Właściciel został usunięty. Prefiks adresu został zmieniony z 10.0.0.0/16 na 10.0.0.0/15. Podsieć o nazwie subnet001 została usunięta. Pamiętaj, że te zmiany nie zostały wdrożone. Zostanie wyświetlony podgląd zmian, które zostaną wprowadzone w przypadku wdrożenia szablonu.

Niektóre właściwości, które są wyświetlane jako usunięte, w rzeczywistości nie zmienią się. Właściwości mogą być niepoprawnie zgłaszane jako usunięte, gdy nie znajdują się w szablonie, ale są automatycznie ustawiane podczas wdrażania jako wartości domyślne. Ten wynik jest uznawany za "szum" w odpowiedzi what-if. Ostateczny wdrożony zasób będzie miał ustawione wartości właściwości. Gdy operacja what-if dojrzeje, te właściwości zostaną odfiltrowane z wyniku.

Programowe ocenianie wyników analizy what-if

Teraz programowo oceńmy wyniki analizy what-if, ustawiając polecenie na zmienną.

$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"

Zostanie wyświetlony podsumowanie każdej zmiany.

foreach ($change in $results.Changes)
{
  $change.Delta
}

Potwierdzenie usunięcia

Operacja what-if obsługuje używanie trybu wdrażania. Po skonfigurowaniu trybu ukończenia zasoby poza szablonem są usuwane. Poniższy przykład wdraża szablon, który nie ma żadnych zasobów zdefiniowanych w trybie kompletnym.

Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj parametru przełącznika potwierdzania w ramach polecenia wdrażania. Jeśli zmiany są zgodnie z oczekiwaniami, odpowiedz, że chcesz zakończyć wdrożenie.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Mode Complete `
  -Confirm `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/empty-template/azuredeploy.json"

Ponieważ w szablonie nie zdefiniowano żadnych zasobów, a tryb wdrażania został ustawiony na ukończenie, sieć wirtualna zostanie usunięta.

Resource Manager wdrażania szablonu, jeśli tryb wdrażania danych wyjściowych operacji jest ukończony

Dane wyjściowe tekstu to:

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"):

Zobaczysz oczekiwane zmiany i potwierdzisz, że chcesz uruchomić wdrożenie.

Zestawy SDK

Możesz użyć operacji what-if za pośrednictwem zestawów Azure SDK.

Następne kroki

  • Aby użyć operacji what-if w potoku, zobacz Test arm templates with What-If in a pipeline (Testowanie szablonów arm za pomocą What-If w potoku).
  • Jeśli zauważysz nieprawidłowe wyniki operacji analizy what-if, zgłoś problemy na stronie https://aka.ms/whatifissues .
  • Aby uzyskać Microsoft Learn, który obejmuje korzystanie z funkcji what if, zobacz Podgląd zmian i weryfikowanie zasobów platformy Azure przy użyciu funkcji what-if i zestawu narzędzi testowych szablonu usługi ARM.