Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przed wdrożeniem szablonu usługi Azure Resource Manager (szablonu usługi ARM) możesz wyświetlić podgląd zmian, które zostaną wprowadzone. Usługa Azure Resource Manager udostępnia operację analizy warunkowej, która umożliwia sprawdzenie, jak zmienią się zasoby 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.
Operacji analizy warunkowej można użyć z Azure PowerShell, interfejsem wiersza polecenia platformy Azure lub operacjami interfejsu API REST. Analiza "co, jeśli" jest obsługiwana w przypadku wdrożeń na poziomie grupy zasobów, subskrypcji, grup zarządzania i dzierżawy.
Zasoby szkoleniowe
Aby dowiedzieć się więcej na temat analizy warunkowej i praktycznych wskazówek, zobacz Podgląd zmian wdrożenia platformy Azure przy użyciu analizy warunkowej.
Wymagania wstępne
Wymagane uprawnienia
Aby wdrożyć plik Bicep lub szablon usługi Azure Resource Manager (ARM), musisz mieć dostęp do zapisu w wdrażanych zasobach i uzyskać dostęp do wszystkich operacji w typie Microsoft.Resources/deployments zasobu. Na przykład, aby wdrożyć maszynę wirtualną, potrzebne są uprawnienia Microsoft.Compute/virtualMachines/write i Microsoft.Resources/deployments/*. Operacja typu "co-jeżeli" ma takie same wymagania dotyczące uprawnień.
Interfejs wiersza polecenia platformy Azure w wersji 2.76.0 lub nowszej oraz program Azure PowerShell w wersji 13.4.0 lub nowszej wprowadza przełącznik ValidationLevel, aby określić, jak dokładnie usługa ARM weryfikuje szablon Bicep podczas tego procesu. Aby uzyskać więcej informacji, zobacz Polecenia warunkowe
Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.
Limity hipotetyczne
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 w wdrożeniu międzygrupowym zasobów.
- 5 minut zajęło wykonanie rozszerzenia zagnieżdżonych szablonów.
Po osiągnięciu jednego z limitów pozostały typ zmiany zasobów jest ustawiony na Ignoruj.
Instalowanie modułu programu Azure PowerShell
Aby użyć opcji what-if w PowerShell, musisz mieć moduł Az w wersji 4.2 lub nowszej.
Aby zainstalować moduł, użyj:
Install-Module -Name Az -Force
Aby uzyskać więcej informacji na temat instalowania modułów, zobacz Instalowanie programu Azure PowerShell.
Instalowanie modułu interfejsu wiersza polecenia platformy Azure
Aby użyć funkcji 'what-if' w Azure CLI, musisz mieć Azure CLI 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.
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 / Notatka
Operacja analizy co-jeżeli nie może rozpoznać funkcji odwołania. Za każdym razem, gdy ustawiasz właściwość na wyrażenie szablonu zawierające funkcję referencyjną, raport what-if zgłasza, że właściwość się zmieni. To zachowanie występuje, ponieważ analiza what-if 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. Po wdrożeniu szablonu właściwość zmieni się tylko wtedy, gdy wyrażenie szablonu zostanie rozpoznane jako inna wartość.
Polecenia warunkowe
Azure PowerShell
Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj polecenia New-AzResourceGroupDeployment lub New-AzSubscriptionDeployment. Dodaj parametr przełącznika -Whatif do polecenia wdrożenia.
New-AzResourceGroupDeployment -Whatifw przypadku wdrożeń grup zasobówNew-AzSubscriptionDeployment -WhatifiNew-AzDeployment -Whatifdla wdrożeń na poziomie subskrypcji
Możesz użyć parametru przełącznika -Confirm, aby wyświetlić podgląd zmian i otrzymać komunikat z pytaniem o kontynuowanie wdrażania.
-
New-AzResourceGroupDeployment -Confirmw przypadku wdrożeń grup zasobów -
New-AzSubscriptionDeployment -ConfirmiNew-AzDeployment -Confirmdla 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-AzResourceGroupDeploymentWhatIfResultw przypadku wdrożeń grup zasobów -
$results = Get-AzSubscriptionDeploymentWhatIfResultlub$results = Get-AzDeploymentWhatIfResultw przypadku 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 do wdrożeń grup zasobów
- az deployment sub what-if dla wdrożeń na poziomie subskrypcji
- az deployment mg what-if dla wdrożeń grup zarządzania
- az deployment tenant what-if dla wdrożeń najemców
Możesz użyć przełącznika --confirm-with-what-if (lub jego krótszej wersji -c), aby wyświetlić podgląd zmian i wyświetlić monit o kontynuowanie wdrażania. Dodaj ten przełącznik do:
- az deployment group create - komenda do tworzenia grup wdrażania w Azure
- az deployment sub create.
- az deployment mg create (polecenie do tworzenia wdrożeń zarządzanych w Azure)
- 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 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 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 na tak.
Azure REST API
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 na poziomie grupy zarządzania dla wdrożeń grup zarządzania
- Wdrożenia — analiza skutków 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 obecnie nie istnieje, ale jest zdefiniowany w szablonie. Zasób zostanie utworzony.
- Usuń: ten typ zmiany ma zastosowanie tylko w przypadku korzystania z 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. Tylko zasoby, które obsługują usuwanie w trybie pełnym są uwzględniane w ramach tego typu zmian.
- Ignoruj: zasób istnieje, ale nie jest zdefiniowany w szablonie. Zasób nie zostanie wdrożony ani zmodyfikowany. Po osiągnięciu limitów rozwijania szablonów zagnieżdżonych napotkasz 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 zostaną zmienione. 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ść
sku.tierjest zawsze ustawiona tak, aby odpowiadałasku.namew przestrzeni nazwMicrosoft.ServiceBus. -
Modyfikuj: zasób istnieje i jest zdefiniowany w szablonie. Zasób zostanie wdrożony ponownie, a właściwości zasobu zostaną zmienione. Ten typ zmiany jest zwracany, gdy parametr ResultFormat jest ustawiony na
FullResourcePayloadswartość , która jest wartością domyślną. -
Wdróż: 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, gdy nie ma wystarczającej ilości informacji, aby określić, czy jakiekolwiek właściwości zostaną zmienione. Ten warunek jest widoczny tylko wtedy, gdy parametr ResultFormat jest ustawiony na
ResourceIdOnlywartość .
Format wyniku
Ty kontrolujesz poziom szczegółowości, który jest zwracany dotyczący przewidywanych zmian. Dostępne są dwie opcje:
- FullResourcePayloads — zwraca listę zasobów, które zmienią się 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.
Uruchom operację co-jeżeli
Konfigurowanie środowiska
Aby zobaczyć, jak działa strategia co-jeżeli, uruchomimy kilka testów. Najpierw wdróż szablon, który tworzy sieć wirtualną. Użyjesz tej sieci wirtualnej, aby przetestować sposób raportowania zmian według 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"
Modyfikacja testowa
Po zakończeniu wdrażania możesz przetestować operację analizy warunkowej. Tym razem wdrażasz szablon, który zmienia sieć wirtualną. Brakuje jednego z oryginalnych tagów, podsieć została usunięta, a prefiks adresu został zmieniony.
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"
Wynik scenariusza "co-jeśli" wygląda podobnie do poniższego:
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ę u góry danych wyjściowych, że kolory są zdefiniowane, aby wskazywać typ zmian.
Na dole danych wyjściowych jest wyświetlane, że 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 po wdrożeniu 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 warunkowej. 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 warunkowej
Teraz programowo oceńmy wyniki analizy co-jeżeli, ustawiając polecenie jako 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 wyświetlić podsumowanie każdej zmiany.
foreach ($change in $results.Changes)
{
$change.Delta
}
Potwierdź usunięcie
Operacja analizy warunkowej obsługuje korzystanie z trybu wdrażania. Po ustawieniu trybu ukończenia zasoby, które nie znajdują się w szablonie, są usuwane. W poniższym przykładzie wdrażany jest szablon, który nie ma żadnych zasobów zdefiniowanych w trybie pełnym.
Aby wyświetlić podgląd zmian przed wdrożeniem szablonu, użyj parametru confirm switch z poleceniem deployment. 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 narzędzi programistycznych
Możesz użyć operacji analizy co-jeżeli za pomocą zestawów SDK platformy Azure.
W przypadku języka Python użyj analizy warunkowej.
W przypadku języka Java użyj klasy DeploymentWhatIf.
W przypadku platformy .NET użyj klasy DeploymentWhatIf.
Dalsze kroki
- Rozszerzenie usługi ARM Deployment Insights zapewnia łatwy sposób integrowania operacji analizy warunkowej w potoku usługi Azure DevOps.
- Aby użyć operacji co-jeżeli w potoku, zobacz Testowanie szablonów ARM przy użyciu co-jeżeli w potoku.
- Jeśli zauważysz nieprawidłowe wyniki operacji warunkowej, zgłoś problemy na stronie 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 warunkowej i zestawu narzędzi do testowania szablonów usługi ARM.