Режимы развертывания в Azure Resource Manager

При развертывании имеющихся ресурсов можно указать, что развертывание является добавочным или полным обновлением. Различие между этими двумя режимами заключается в том, как Resource Manager обрабатывает ресурсы, имеющиеся в группе ресурсов, которых нет в шаблоне.

Для обоих режимов Resource Manager пытается создать все ресурсы, указанные в шаблоне. Если ресурс уже существует в группе ресурсов и его параметры не изменились, для этого ресурса не выполняются операции. Если значения свойств ресурса были изменены, они обновятся в ресурсе. При попытке обновить расположение или тип имеющегося ресурса развертывание завершится ошибкой. Вместо этого вы можете развернуть новый ресурс нужного вам типа с необходимым расположением.

По умолчанию используется пошаговый режим.

Полный режим

При использовании полного режима Resource Manager удаляет ресурсы, которые существуют в группе ресурсов, но не указаны в шаблоне.

Примечание

Всегда используйте операцию "что если" перед развертыванием шаблона в режиме завершения. Эта операция позволяет просмотреть, какие ресурсы будут созданы, удалены или изменены. Кроме того, с ее помощью можно избежать непреднамеренного удаления ресурсов.

Если шаблон содержит ресурс, который не развернут, так как условие принимает значение false, то результат зависит от того, какая версия REST API используется для развертывания шаблона. Если вы используете версию ниже 2019-05-10, ресурс не удаляется. В версии 2019-05-10 или более поздних версиях ресурс удаляется. В последних версиях Azure PowerShell и Azure CLI ресурс также удаляется.

Будьте внимательны при развертывании в полном режиме с использованием циклов копирования. Все ресурсы, не указанные в шаблоне после разрешения цикла копирования, удаляются.

Если развернуть в шаблоне несколько групп ресурсов, то ресурсы группы, указанной в операции развертывания, можно удалить. Ресурсы во вторичных группах ресурсов не удаляются.

Существуют различия между тем, как выполняется удаление в полном режиме для различных типов ресурсов. Родительские ресурсы автоматически удаляются, если находятся не на шаблоне, который развертывается в полном режиме. Некоторые дочерние ресурсы не удаляются автоматически, если находятся вне шаблона. Однако, эти дочерние ресурсы удаляются при удалении родительского ресурса.

Например, если ваша группа ресурсов содержит зону DNS (тип ресурса Microsoft.Network/dnsZones) и запись CNAME (тип ресурса Microsoft.Network/dnsZones/CNAME), то зона DNS является родительским ресурсом для записи CNAME. Если вы используете полный режим во время развертывания и не включаете в вашем шаблоне зону DNS, то и зона DNS, и запись CNAME удаляться. Если вы включили зону DNS в ваш шаблон, но не включили в него запись CNAME, то запись CNAME не будет удалена.

Дополнительные сведения об удалении разных типов ресурсов см. в статье Deletion of Azure resources for complete mode deployments (Удаление ресурсов Azure для развертываний в полном режиме).

Если группа ресурсов заблокирована, то ресурсы в полном режиме не удаляются.

Примечание

Только шаблоны корневого уровня поддерживают режим полного развертывания. Для связанных или вложенных шаблонов необходимо использовать добавочный режим.

Развертывания уровня подписки не поддерживают полный режим.

Сейчас портал не поддерживает полный режим.

Пошаговый режим

В пошаговом режиме Resource Manager оставляет без изменения ресурсы, которые существуют в группе ресурсов, но не указаны в шаблоне. Ресурсы из шаблона добавляются в группу ресурсов.

Важно!

При повторном развертывании существующего ресурса в пошаговом режиме все свойства применяются повторно. Свойства не добавляются пошагово. Распространенным неверным пониманием является то, что свойства, не указанные в шаблоне, останутся неизменными. Если определенные свойства не указаны, то Resource Manager интерпретирует это развертывание как перезапись таких значений. Для свойств, которые не включены в шаблон, устанавливаются значения по умолчанию. Укажите для ресурса значения всех свойств, отличные от значений по умолчанию, а не только значения свойств, которые вы обновляете. Определение ресурса в шаблоне всегда содержит окончательное состояние ресурса. Оно не может представлять частичное обновление для существующего ресурса.

Предупреждение

В редких случаях можно указать свойства либо для ресурса, либо для одного из его дочерних ресурсов. Двумя распространенными примерами являются подсети в виртуальных сетях и значения конфигурации сайта для веб-приложений. В таких случаях необходимо тщательно обрабатывать добавочные обновления.

Для подсетей укажите значения с помощью свойства subnets для ресурса Microsoft.Network/virtualNetworks. Не определяйте значения через Microsoft.Network/virtualNetworks/subnets дочернего ресурса. Пока подсети определены в виртуальной сети, вы можете повторно развернуть виртуальную сеть без потери подсетей.

Для значений конфигурации сайта эти значения реализуются в типе "Дочерний ресурс" Microsoft.Web/sites/config. Если повторно развернуть веб-приложение и указать пустой объект для значений конфигурации сайта, то дочерний ресурс не будет обновлен. Однако при указании новых значений конфигурации сайта тип дочернего ресурса обновляется.

Пример результата

Чтобы понять различие между инкрементным и полным режимом, рассмотрим следующий сценарий.

Группа ресурсов содержит:

  • ресурс А;
  • ресурс Б;
  • ресурс В;

Шаблон содержит:

  • ресурс А;
  • ресурс Б;
  • ресурс Г.

При развертывании в пошаговом режиме группа ресурсов содержит:

  • ресурс А;
  • ресурс Б;
  • ресурс В;
  • ресурс Г.

При развертывании в полном режиме ресурс В будет удален. Группа ресурсов содержит:

  • ресурс А;
  • ресурс Б;
  • ресурс Г.

Установка режима развертывания

Чтобы установить режим развертывания при развертывании с помощью PowerShell, используйте параметр Mode.

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

Чтобы установить режим развертывания при развертывании с помощью Azure CLI, используйте параметр mode.

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

В примере ниже показан связанный шаблон с добавочным режимом развертывания:

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

Дальнейшие действия