Operacja analizy co-jeżeli wdrożenia szablonu usługi Resource Manager
Przed wdrożeniem szablonu usługi Azure Resource Manager (szablon usługi ARM) możesz wyświetlić podgląd zmian, które zostaną wprowadzone. Usługa Azure Resource Manager udostępnia operację analizy warunkowej, aby zobaczyć, jak zasoby zmienią się po wdrożeniu szablonu. Operacja warunkowa nie wprowadza żadnych zmian w istniejących zasobach. Zamiast tego przewiduje zmiany w przypadku wdrożenia określonego szablonu.
Możesz użyć operacji analizy warunkowej z operacjami Azure PowerShell, interfejsem wiersza polecenia platformy Azure lub interfejsem API REST. Co-jeśli jest obsługiwane w przypadku wdrożeń na poziomie grupy zasobów, subskrypcji, grupy zarządzania i dzierżawy.
Zasoby szkoleniowe
Aby dowiedzieć się więcej na temat analizy warunkowej i praktycznych wskazówek, zobacz Preview Azure deployment changes by using what-if (Zapoznawcza zmiana wdrożenia platformy Azure przy użyciu analizy warunkowej).
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 w celu wdrożenia maszyny wirtualnej potrzebne są Microsoft.Compute/virtualMachines/write
uprawnienia i Microsoft.Resources/deployments/*
uprawnienia. Operacja warunkowa ma te same wymagania dotyczące uprawnień.
Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.
Limity warunkowe
Warunkowe rozszerzanie zagnieżdżonych szablonów 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 na rozszerzenie zagnieżdżonych szablonów.
Po osiągnięciu jednego z limitów pozostały typ zmiany zasobów ma wartość 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 użyć analizy warunkowej 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 warunkowej 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.
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 warunkowej nie może rozpoznać funkcji referencyjnej. Za każdym razem, gdy właściwość zostanie ustawiona na wyrażenie szablonu zawierające funkcję referencyjną, co-jeśli zgłasza zmianę właściwości. To zachowanie dzieje się, ponieważ wartość warunkowa 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 szablonu właściwość zmieni się tylko wtedy, gdy wyrażenie szablonu zostanie rozpoznane na inną wartość.
Polecenia warunkowe
Azure PowerShell
Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, 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ówNew-AzSubscriptionDeployment -Whatif
iNew-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ówNew-AzSubscriptionDeployment -Confirm
iNew-AzDeployment -Confirm
dla wdrożeń na poziomie subskrypcji
Powyższe polecenia zwracają podsumowanie tekstu, 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 szablonu, użyj:
- az deployment group what-if for resource group deployments
- az deployment sub-if for subscription level deployments (az deployment sub-if for subscription level deployment)
- az deployment mg what-if for management group deployments (az deployment mg what-if for management group deployments)
- az deployment tenant what-if for tenant deployments (az deployment tenant what-if for tenant deployments)
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:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
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 tekstu, 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 wartość no_color na tak.
Interfejs API REST platformy Azure
W przypadku interfejsu API REST użyj:
- Wdrożenia — co w przypadku wdrożeń grup zasobów
- Wdrożenia — co jeśli w zakresie subskrypcji dla wdrożeń subskrypcji
- Wdrożenia — co jeśli w zakresie grupy zarządzania dla wdrożeń grup zarządzania
- Wdrożenia — co jeśli w zakresie dzierżawy dla wdrożeń dzierżawy.
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 szablonie. Zasób zostanie utworzony.
- Usuń: ten typ zmiany ma zastosowanie tylko w przypadku korzystania z trybu pełnego wdrożenia. Zasób istnieje, ale nie jest zdefiniowany w szablonie. W przypadku trybu pełnego zasób zostanie usunięty. W tym typie zmiany są uwzględniane tylko zasoby , które obsługują usuwanie trybu pełnego .
- Ignoruj: zasób istnieje, ale nie jest zdefiniowany w szablonie. Zasób nie zostanie wdrożony ani zmodyfikowany. Po osiągnięciu limitów rozszerzania zagnieżdżonych szablonów wystąpi ten typ zmiany. Zobacz Limity warunkowe.
- 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 parametr ResultFormat jest ustawiony na
FullResourcePayloads
wartość , która jest wartością domyślną. - NoEffect: właściwość jest gotowa tylko do użycia i zostanie zignorowana przez usługę. Na przykład właściwość jest zawsze ustawiona tak,
sku.tier
aby odpowiadałaMicrosoft.ServiceBus
sku.name
w przestrzeni nazw. - 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 parametr ResultFormat jest ustawiony na
FullResourcePayloads
wartość , 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świetlany tylko wtedy, gdy parametr ResultFormat jest ustawiony na
ResourceIdOnly
wartość .
Format wyniku
Możesz kontrolować poziom szczegółowości zwracany na temat przewidywanych zmian. Dostępne są dwie opcje:
- FullResourcePayloads — zwraca listę zasobów, które zostaną zmienione, oraz 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 co-jeżeli
Konfigurowanie środowiska
Aby zobaczyć, jak działa funkcja analizy co-jeżeli, uruchomimy kilka testów. Najpierw wdróż szablon, który tworzy sieć wirtualną. Użyjesz tej sieci wirtualnej do przetestowania sposobu zgłaszania zmian przez analizy co-jeżeli.
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"
Testowanie modyfikacji
Po zakończeniu wdrażania możesz przetestować operację analizy co-jeżeli. 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:
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ę na górę danych wyjściowych, które są zdefiniowane 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. 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 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 szablonie, ale są automatycznie ustawiane podczas wdrażania jako wartości domyślne. Ten wynik jest uznawany za "szum" w odpowiedzi analizy co-jeżeli. Ostatni wdrożony zasób będzie miał wartości ustawione dla właściwości. W miarę dojrzewania operacji analizy co-jeżeli te właściwości zostaną odfiltrowane z wyniku.
Programowe ocenianie wyników analizy co-jeżeli
Teraz programowo oceńmy wyniki analizy co-jeżeli, 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"
Możesz zobaczyć podsumowanie każdej zmiany.
foreach ($change in $results.Changes)
{
$change.Delta
}
Potwierdzenie usunięcia
Operacja analizy co-jeżeli obsługuje korzystanie z trybu wdrażania. Po ustawieniu trybu pełnego zasoby, które nie znajdują się w szablonie, zostaną usunięte. W poniższym przykładzie wdrożono szablon, który nie ma zdefiniowanych zasobów w trybie pełnym.
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 wdrożenie ma zostać ukończone.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Mode Complete `
-Confirm `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"
Ponieważ w szablonie nie zdefiniowano żadnych zasobów, a tryb wdrażania jest ustawiony na ukończenie, sieć wirtualna zostanie usunięta.
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 możesz potwierdzić, że wdrożenie ma zostać uruchomione.
Zestawy SDK
Możesz użyć operacji analizy co-jeżeli za pomocą zestawów SDK platformy Azure.
W przypadku języka Python użyj analizy co-jeżeli.
W przypadku języka Java użyj klasy DeploymentWhatIf.
W przypadku platformy .NET użyj klasy DeploymentWhatIf.
Następne kroki
- Rozszerzenie ARM Deployment Insights umożliwia łatwą integrację operacji analizy co-jeżeli w potoku usługi Azure DevOps.
- Aby użyć operacji analizy co-jeżeli w potoku, zobacz Testowanie szablonów usługi ARM przy użyciu What-If w potoku.
- Jeśli zauważysz nieprawidłowe wyniki operacji analizy co-jeżeli, zgłoś problemy pod adresem https://aka.ms/whatifissues.
- Aby zapoznać się z modułem Learn, który obejmuje korzystanie z analizy warunkowej, zobacz Podgląd zmian i weryfikowanie zasobów platformy Azure przy użyciu analizy co-jeżeli i zestawu narzędzi do testowania szablonu usługi ARM.