Tryby wdrażania usługi Azure Resource Manager

Podczas wdrażania zasobów należy określić, że wdrożenie jest aktualizacją przyrostową lub kompletną aktualizacją. Różnica między tymi dwoma trybami polega na tym, jak Resource Manager obsługuje istniejące zasoby w grupie zasobów, która nie znajduje się w szablonie.

W obu trybach Resource Manager próbuje utworzyć wszystkie zasoby określone w szablonie. Jeśli zasób już istnieje w grupie zasobów i jego ustawienia są niezmienione, nie zostanie podjęta żadna operacja dla tego zasobu. Jeśli zmienisz wartości właściwości zasobu, zasób zostanie zaktualizowany o te nowe wartości. Jeśli spróbujesz zaktualizować lokalizację lub typ istniejącego zasobu, wdrożenie zakończy się niepowodzeniem z powodu błędu. Zamiast tego wdróż nowy zasób z potrzebną lokalizacją lub typem.

Tryb domyślny jest przyrostowy.

Tryb ukończenia

W trybie pełnym Resource Manager usuwa zasoby, które istnieją w grupie zasobów, ale nie są określone w szablonie.

Uwaga

Zawsze używaj operacji analizy warunkowej przed wdrożeniem szablonu w trybie pełnym. Co-jeśli pokazuje, które zasoby zostaną utworzone, usunięte lub zmodyfikowane. Użyj analizy warunkowej, aby uniknąć przypadkowego usuwania zasobów.

Jeśli szablon zawiera zasób, który nie został wdrożony, ponieważ warunek ma wartość false, wynik zależy od wersji interfejsu API REST używanej do wdrożenia szablonu. Jeśli używasz wersji starszej niż 2019-05-10, zasób nie zostanie usunięty. W przypadku wersji 2019-05-10 lub nowszej zasób zostanie usunięty. Najnowsze wersje Azure PowerShell i interfejsu wiersza polecenia platformy Azure usuwają zasób.

Zachowaj ostrożność przy użyciu trybu pełnego z pętlami kopiowania. Wszystkie zasoby, które nie są określone w szablonie po usunięciu pętli kopiowania, zostaną usunięte.

W przypadku wdrożenia w więcej niż jednej grupie zasobów w szablonie zasoby w grupie zasobów określonej w operacji wdrażania mogą zostać usunięte. Zasoby w grupach zasobów pomocniczych nie są usuwane.

Istnieją pewne różnice w sposobie obsługi usuwania trybu pełnego przez typy zasobów. Zasoby nadrzędne są automatycznie usuwane, gdy nie w szablonie wdrożonym w trybie pełnym. Niektóre zasoby podrzędne nie są automatycznie usuwane, gdy nie znajduje się w szablonie. Jednak te zasoby podrzędne są usuwane, jeśli zasób nadrzędny zostanie usunięty.

Jeśli na przykład grupa zasobów zawiera strefę DNS (Microsoft.Network/dnsZones typ zasobu) i rekord CNAME (Microsoft.Network/dnsZones/CNAME typ zasobu), strefa DNS jest zasobem nadrzędnym rekordu CNAME. W przypadku wdrożenia w trybie pełnym i nie dołączania strefy DNS do szablonu, zarówno strefa DNS, jak i rekord CNAME zostaną usunięte. Jeśli uwzględnisz strefę DNS w szablonie, ale nie dołączysz rekordu CNAME, nazwa CNAME nie zostanie usunięta.

Aby uzyskać listę sposobu obsługi usuwania typów zasobów, zobacz Usuwanie zasobów platformy Azure na potrzeby wdrożeń w trybie pełnym.

Jeśli grupa zasobów jest zablokowana, tryb ukończenia nie usuwa zasobów.

Uwaga

Tylko szablony na poziomie głównym obsługują pełny tryb wdrażania. W przypadku szablonów połączonych lub zagnieżdżonych należy użyć trybu przyrostowego.

Wdrożenia na poziomie subskrypcji nie obsługują trybu pełnego.

Obecnie portal nie obsługuje trybu pełnego.

Tryb przyrostowy

W trybie przyrostowym Resource Manager pozostawia niezmienione zasoby, które istnieją w grupie zasobów, ale nie są określone w szablonie. Zasoby w szablonie są dodawane do grupy zasobów.

Ważne

Podczas ponownego wdrażania istniejącego zasobu w trybie przyrostowym wszystkie właściwości są ponownie wdrażane. Właściwości nie są dodawane przyrostowo. Typowe nieporozumienie polega na tym, że właściwości, które nie zostały określone w szablonie, pozostają niezmienione. Jeśli nie określisz określonych właściwości, Resource Manager interpretuje wdrożenie jako zastąpienie tych wartości. Właściwości, które nie są uwzględnione w szablonie, są resetowane do wartości domyślnych. Określ wszystkie wartości inne niż domyślne dla zasobu, a nie tylko te, które aktualizujesz. Definicja zasobu w szablonie zawsze zawiera ostateczny stan zasobu. Nie może reprezentować częściowej aktualizacji istniejącego zasobu.

Ostrzeżenie

W rzadkich przypadkach można określić właściwości zasobu lub jednego z jego zasobów podrzędnych. Dwa typowe przykłady to podsieci w sieciach wirtualnych i wartościach konfiguracji lokacji dla aplikacji internetowych. W takich przypadkach należy uważnie obsługiwać aktualizacje przyrostowe.

W przypadku podsieci określ wartości za pomocą subnets właściwości w zasobie Microsoft.Network/virtualNetworks . Nie należy definiować wartości za pomocą zasobu podrzędnego Microsoft.Network/virtualNetworks/podsieci. Tak długo, jak podsieci są zdefiniowane w sieci wirtualnej, można ponownie wdrożyć sieć wirtualną i nie utracić podsieci.

W przypadku wartości konfiguracji lokacji wartości są implementowane w podrzędnym typie Microsoft.Web/sites/configzasobu . Jeśli ponownie wdrożysz aplikację internetową i określisz pusty obiekt dla wartości konfiguracji lokacji, zasób podrzędny nie zostanie zaktualizowany. Jeśli jednak podasz nowe wartości konfiguracji lokacji, typ zasobu podrzędnego zostanie zaktualizowany.

Przykładowy wynik

Aby zilustrować różnicę między trybami przyrostowym i pełnymi, rozważmy następujący scenariusz.

Grupa zasobów zawiera:

  • Zasób A
  • Zasób B
  • Zasób C

Szablon zawiera:

  • Zasób A
  • Zasób B
  • Zasób D

Po wdrożeniu w trybie przyrostowym grupa zasobów ma następujące elementy:

  • Zasób A
  • Zasób B
  • Zasób C
  • Zasób D

Po wdrożeniu w trybie pełnym zostanie usunięty zasób C. Grupa zasobów ma:

  • Zasób A
  • Zasób B
  • Zasób D

Ustawianie trybu wdrażania

Aby ustawić tryb wdrażania podczas wdrażania przy użyciu programu PowerShell, użyj parametru Mode .

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Aby ustawić tryb wdrażania podczas wdrażania przy użyciu interfejsu wiersza polecenia platformy Azure, użyj parametru mode .

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

W poniższym przykładzie przedstawiono połączony szablon ustawiony na tryb wdrażania przyrostowego:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Następne kroki