Operacja analizy co-jeżeli wdrożenia Bicep

Przed wdrożeniem pliku Bicep można wyświetlić podgląd zmian, które zostaną wprowadzone. Usługa Azure Resource Manager udostępnia operację analizy co-jeżeli, aby zobaczyć, jak zasoby zmienią się w przypadku wdrożenia pliku Bicep. Operacja warunkowa nie wprowadza żadnych zmian w istniejących zasobach. Zamiast tego przewiduje zmiany w przypadku wdrożenia określonego pliku Bicep.

Możesz użyć operacji analizy co-jeżeli w przypadku operacji Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub interfejsu API REST. Co-jeżeli jest obsługiwane w przypadku wdrożeń na poziomie grupy zasobów, subskrypcji, grupy zarządzania i dzierżawy.

Podczas What-If operacji ocena i rozszerzenie templateLink nie są obsługiwane. W związku z tym wszystkie zasoby wdrożone przy użyciu linków szablonu w ramach zagnieżdżonych wdrożeń, w tym odwołania do specyfikacji szablonu, nie będą widoczne w wynikach operacji What-If.

Zasoby szkoleniowe

Jeśli wolisz dowiedzieć się więcej na temat operacji analizy co-jeżeli, korzystając ze wskazówek krok po kroku, zobacz Podgląd zmian wdrożenia platformy Azure przy użyciu analizy co-jeżeli.

Wymagane uprawnienia

Aby wdrożyć plik Bicep lub szablon usługi ARM, potrzebujesz dostępu do zapisu w zasobach wdrażanych i dostępu do wszystkich operacji w typie zasobu Microsoft.Resources/deployments. Na przykład do wdrożenia maszyny wirtualnej potrzebne Microsoft.Compute/virtualMachines/write są uprawnienia i Microsoft.Resources/deployments/* . Operacja analizy co-jeżeli ma te same wymagania dotyczące uprawnień.

Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.

Limity warunkowe

Co-jeżeli rozszerza zagnieżdżone szablony do momentu osiągnięcia tych limitów:

  • 500 zagnieżdżonych szablonów.
  • 800 grup zasobów we wdrożeniu między grupami zasobów.
  • 5 minut potrzebnych do rozszerzenia zagnieżdżonych szablonów.

Po osiągnięciu jednego z limitów typ zmiany pozostałych zasobów jest ustawiony na Ignoruj.

Instalowanie modułu Azure PowerShell

Aby użyć analizy co-jeżeli 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 korzystać z analizy co-jeżeli 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.

Zobacz wyniki

W przypadku korzystania z analizy co-jeżeli w programie PowerShell lub interfejsie wiersza polecenia platformy Azure dane wyjściowe zawierają wyniki kodowane kolorami, które ułatwiają wyświetlanie różnych typów zmian.

Bicep deployment what-if operation fullresourcepayload and change types

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 analizy co-jeżeli nie może rozpoznać funkcji odwołania. Za każdym razem, gdy ustawisz właściwość na wyrażenie szablonu zawierające funkcję referencyjną, funkcja analizy co-jeżeli zgłasza zmianę właściwości. To zachowanie występuje, ponieważ funkcja analizy co-jeżeli porównuje bieżącą wartość właściwości (np true . lub false dla wartości logicznej) z nierozwiązanym wyrażeniem szablonu. Oczywiście te wartości nie będą zgodne. Podczas wdrażania pliku Bicep właściwość zmieni się tylko wtedy, gdy wyrażenie szablonu zostanie rozpoznane na inną wartość.

Polecenia analizy co-jeżeli

Azure PowerShell

Aby wyświetlić podgląd zmian przed wdrożeniem pliku Bicep, użyj polecenia New-AzResourceGroupDeployment lub New-AzSubscriptionDeployment. -Whatif Dodaj parametr 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, -Confirm aby wyświetlić podgląd zmian i 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

Powyższe polecenia zwracają podsumowanie tekstowe, które można ręcznie sprawdzić. Aby uzyskać obiekt, który można programowo sprawdzić pod kątem zmian, użyj polecenia Get-AzResourceGroupDeploymentWhatIfResult lub Get-AzSubscriptionDeploymentWhatIfResult.

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

Interfejs wiersza polecenia platformy Azure

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

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

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

Powyższe polecenia zwracają podsumowanie tekstowe, które można ręcznie sprawdzić. Aby uzyskać obiekt JSON, który można programowo sprawdzić pod kątem zmian, użyj przełącznika --no-pretty-print . Na przykład użyj polecenia az deployment group what-if --no-pretty-print dla 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 wartość tak.

Interfejs API REST platformy Azure

W przypadku interfejsu API REST użyj:

Typy zmian

Operacja analizy co-jeżeli zawiera listę siedmiu różnych typów zmian:

  • Utwórz: zasób nie istnieje obecnie, ale jest zdefiniowany w pliku Bicep. Zasób zostanie utworzony.
  • Usuń: ten typ zmiany ma zastosowanie tylko w przypadku korzystania z trybu pełnego wdrożenia szablonu JSON. Zasób istnieje, ale nie jest zdefiniowany w pliku Bicep. W przypadku trybu pełnego zasób zostanie usunięty. W tym typie zmiany są uwzględniane tylko zasoby, które obsługują usuwanie w trybie pełnym .
  • Ignoruj: zasób istnieje, ale nie jest zdefiniowany w pliku Bicep. Zasób nie zostanie wdrożony ani zmodyfikowany. Gdy osiągniesz limity rozszerzania zagnieżdżonych szablonów, ten typ zmiany zostanie napotkany. Zobacz Limity analizy co-jeżeli.
  • NoChange: zasób istnieje i jest zdefiniowany w pliku Bicep. Zasób zostanie wdrożony ponownie, ale właściwości zasobu nie ulegną zmianie. Ten typ zmiany jest zwracany, gdy parametr ResultFormat jest ustawiony na FullResourcePayloadswartość , która jest wartością domyślną.
  • NoEffect: właściwość jest gotowa i zostanie zignorowana przez usługę. Na przykład właściwość jest zawsze ustawiona sku.tier tak, aby odpowiadała Microsoft.ServiceBussku.name w przestrzeni nazw.
  • Modyfikowanie: zasób istnieje i jest zdefiniowany w pliku Bicep. Zasób zostanie wdrożony ponownie i właściwości zasobu ulegną zmianie. Ten typ zmiany jest zwracany, gdy parametr ResultFormat jest ustawiony na FullResourcePayloadswartość , która jest wartością domyślną.
  • Wdrażanie: zasób istnieje i jest zdefiniowany w pliku Bicep. 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 parametr ResultFormat jest ustawiony na ResourceIdOnlywartość .

Format wyniku

Określasz poziom szczegółowości zwracany na temat przewidywanych zmian. Dostępne są dwie opcje:

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

Wartość domyślna to FullResourcePayloads.

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

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

W poniższych wynikach przedstawiono 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 analizy warunkowej

Konfigurowanie środowiska

Aby zobaczyć, jak działa what-if, uruchomimy niektóre testy. Najpierw wdróż plik Bicep, który tworzy sieć wirtualną. Użyjesz tej sieci wirtualnej do przetestowania sposobu zgłaszania zmian przez co-jeżeli. Pobierz kopię pliku 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'
        }
      }
    ]
  }
}

Aby wdrożyć plik Bicep, użyj:

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

Modyfikacja testu

Po zakończeniu wdrażania możesz przetestować operację analizy warunkowej. Tym razem wdrożysz plik Bicep, który zmienia sieć wirtualną. Brakuje jednego z oryginalnych tagów, usunięto podsieć i zmieniono prefiks adresu. Pobierz kopię pliku 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'
        }
      }
    ]
  }
}

Aby wyświetlić zmiany, użyj:

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

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

Dane wyjściowe operacji analizy warunkowej wdrożenia Bicep

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

Zwróć uwagę na początku danych wyjściowych zdefiniowanych w celu wskazania typu zmian.

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

Niektóre właściwości wymienione jako usunięte nie zostaną rzeczywiście zmienione. Właściwości mogą być niepoprawnie zgłaszane jako usunięte, gdy nie znajdują się w pliku Bicep, ale są automatycznie ustawiane podczas wdrażania jako wartości domyślne. Ten wynik jest uznawany za "szum" w odpowiedzi warunkowej. Ostatni wdrożony zasób będzie miał wartości ustawione dla właściwości. W miarę dojrzewania operacji analizy warunkowej te właściwości zostaną odfiltrowane z wyniku.

Programowe ocenianie wyników analizy warunkowej

Teraz programowo oceńmy wyniki analizy warunkowej, ustawiając polecenie na zmienną.

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

Podsumowanie każdej zmiany można wyświetlić.

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

Potwierdzenie usunięcia

Aby wyświetlić podgląd zmian przed wdrożeniem pliku Bicep, użyj parametru potwierdzania przełącznika za pomocą polecenia wdrożenia. Jeśli zmiany są zgodnie z oczekiwaniami, odpowiedz, że wdrożenie ma zostać ukończone.

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

Bicep deployment what-if operation output deployment mode complete (Ukończono tryb wdrażania operacji warunkowej operacji Bicep)

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

Zobaczysz oczekiwane zmiany i możesz potwierdzić, że wdrożenie ma zostać uruchomione.

Czyszczenie zasobów

Gdy nie potrzebujesz już przykładowych zasobów, użyj interfejsu wiersza polecenia platformy Azure lub Azure PowerShell, aby usunąć grupę zasobów.

az group delete --name ExampleGroup

Zestawy SDK

Operację analizy warunkowej można użyć za pomocą zestawów SDK platformy Azure.

Następne kroki