Operacja analizy co-jeżeli wdrożenia szablonu usługi Resource Manager
Artykuł
Przed wdrożeniem szablonu usługi Azure Resource Manager (szablon usługi ARM) 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 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 co-jeżeli w przypadku operacji programu 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.
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 Microsoft.Compute/virtualMachines/write są uprawnienia i Microsoft.Resources/deployments/* uprawnienia. Operacja analizy co-jeżeli ma te same wymagania dotyczące uprawnień.
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:
PowerShell
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 właściwość zostanie ustawiona na wyrażenie szablonu, które zawiera funkcję referencyjną, 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 szablonu właściwość zmieni się tylko wtedy, gdy wyrażenie szablonu zostanie rozpoznane na inną wartość.
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 na tak.
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. 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. Gdy osiągniesz limity 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 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 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 FullResourcePayloadswartość , 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 widoczny tylko wtedy, gdy parametr ResultFormat jest ustawiony na ResourceIdOnlywartość .
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 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
PowerShell
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
PowerShell
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, aby przetestować sposób raportowania zmian według analizy co-jeżeli.
az group create \
--name ExampleGroup \
--location"Central US"az deployment group create \
--resource-group ExampleGroup \
--template-uri"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 wdrożysz szablon, który zmienia sieć wirtualną. Brakuje jednego z oryginalnych tagów, usunięto podsieć i zmieniono prefiks adresu.
az deployment group what-if \
--resource-group ExampleGroup \
--template-uri"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"
Dane wyjściowe operacji co-jeżeli wyświetlane są podobnie do następujących:
Dane wyjściowe tekstu to:
PowerShell
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órnej części 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 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 na zmienną.
results=$(az deployment group what-if--resource-group ExampleGroup --template-uri"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"--no-pretty-print)
Potwierdź usunięcie
Operacja analizy co-jeżeli obsługuje korzystanie z trybu wdrażania. Po ustawieniu trybu ukończenia 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.
az deployment group create \
--resource-group ExampleGroup \
--mode Complete \
--confirm-with-what-if \
--template-uri"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 został ustawiony na ukończenie, sieć wirtualna zostanie usunięta.
Dane wyjściowe tekstu to:
PowerShell
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.
Twórz kompleksowe rozwiązania na platformie Microsoft Azure, aby tworzyć usługi Azure Functions, implementować aplikacje internetowe i zarządzać nimi, opracowywać rozwiązania korzystające z usługi Azure Storage i nie tylko.
Znajdź dokumentację referencyjną dotyczącą wdrażania zasobów za pośrednictwem szablonów Bicep, azure Resource Manager i dostawcy narzędzia Terraform AzAPI. Pokazuje wszystkie typy zasobów.