Стеки развертывания (предварительная версия)

Стек развертывания Azure — это тип ресурса Azure, который позволяет управлять группой ресурсов Azure в виде атомарного блока. При отправке Bicep-файла или шаблона JSON ARM в стек развертывания определяет ресурсы, управляемые стеком. Если ресурс, ранее включенный в шаблон, удален, он будет отсоединен или удален на основе указанного действияOnUnmanage стека развертывания. Как и другие ресурсы Azure, доступ к стеку развертывания можно ограничить с помощью управления доступом на основе ролей Azure (Azure RBAC).

Чтобы создать и обновить стек развертывания, можно использовать Azure CLI, Azure PowerShell или портал Azure вместе с файлами Bicep. Эти файлы Bicep транспилируются в шаблоны ARM JSON, которые затем развертываются в качестве объекта развертывания стеком. Стек развертывания предоставляет дополнительные возможности за пределами знакомых ресурсов развертывания, которые предоставляются в качестве супермножества этих возможностей.

Microsoft.Resources/deploymentStacks — это тип ресурса для стеков развертывания. Он состоит из основного шаблона, который может выполнять 1 ко многим обновлениям в область для ресурсов, которые он описывает, и блокировать любые нежелательные изменения этих ресурсов.

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

Для стеков развертывания требуется Azure PowerShell версии 10.1.0 или более поздней версии или Azure CLI версии 2.50.0 или более поздней.

Чтобы создать первый стек развертывания, ознакомьтесь с кратким руководством. Создайте стек развертывания.

Зачем использовать стеки развертывания?

Стеки развертывания обеспечивают следующие преимущества:

  • Упрощенная подготовка и управление ресурсами в разных область в качестве единой сущности.
  • Предотвращение нежелательных изменений управляемых ресурсов с помощью параметров запрета.
  • Эффективное очистка среды путем использования флагов удаления во время обновлений стека развертывания.
  • Использование стандартных шаблонов, таких как Bicep, шаблоны ARM или спецификации шаблонов для стеков развертывания.

Известные ограничения

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

Известные проблемы

  • Удаление групп ресурсов в настоящее время проходит запрет назначений. При создании стека развертывания в группе ресурсов область файл Bicep не содержит определения для группы ресурсов. Несмотря на параметр запрета назначения, можно удалить группу ресурсов и его содержащийся стек. Однако если блокировка активна для любого ресурса в группе, операция удаления завершится ошибкой.
  • Что если не доступно в предварительной версии.
  • Стек группы управления область ограничен развертыванием в другой группе управления. Он может развертываться только в группе управления самого стека или в дочерней подписке.

Создание стеков развертывания

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

  • Стек группы ресурсов область может развернуть шаблон, переданный в ту же группу ресурсов, область где существует стек развертывания.
  • Стек подписки область может развернуть шаблон, переданный в группу ресурсов область (если указано) или ту же подписку, область где существует стек развертывания.
  • Стек в группе управления область может развернуть шаблон, переданный в область указанной подписки.

Важно отметить, что где существует стек развертывания, поэтому назначение запрета, созданное с помощью возможности параметров запрета. Например, создав стек развертывания в подписке область, который развертывает шаблон в группе ресурсов область и с режимом DenyDeleteзапрета параметров, можно легко подготовить управляемые ресурсы для указанной группы ресурсов и заблокировать попытки удаления этих ресурсов. Используя этот подход, вы также повышаете безопасность стека развертывания, разделяя его на уровне подписки, а не на уровне группы ресурсов. Это разделение гарантирует, что команды разработчиков, работающие с подготовленными ресурсами, имеют только видимость и запись в группы ресурсов, в то время как стек развертывания остается изолированным на более высоком уровне. Это сводит к минимуму количество пользователей, которые могут изменять стек развертывания и вносить изменения в его отклонение назначения. Дополнительные сведения см. в разделе "Защита управляемого ресурса от удаления".

Команды create-stack также можно использовать для обновления стеков развертывания.

Чтобы создать стек развертывания в группе ресурсов область:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

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

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

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

Чтобы создать стек развертывания в группе управления область:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

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

Вывод списка стеков развертывания

Чтобы перечислить ресурсы стека развертывания в группе ресурсов область:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Чтобы перечислить ресурсы стека развертывания в подписке область:

Get-AzSubscriptionDeploymentStack

Чтобы перечислить ресурсы стека развертывания в группе управления область:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Обновление стеков развертывания

Чтобы обновить стек развертывания, который может включать добавление или удаление управляемого ресурса, необходимо внести изменения в базовые файлы Bicep. После внесения изменений можно обновить стек развертывания двумя способами: выполнить команду обновления или повторно запустить команду создания.

Список управляемых ресурсов можно полностью контролировать с помощью инфраструктуры в виде шаблона проектирования кода (IaC).

Использование команды Set

Чтобы обновить стек развертывания в группе ресурсов область:

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

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

Set-AzSubscriptionDeploymentStack `
   -Name "<deployment-stack-name>" `
   -Location "<location>" `
   -TemplateFile "<bicep-file-name>" `
   -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

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

Чтобы обновить стек развертывания в группе управления область:

Set-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Использование команды New

Вы получите предупреждение, аналогичное следующему:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Дополнительные сведения см. в разделе "Создание стеков развертывания".

Отсоединение и удаление элементов управления

Отключенный ресурс (или неуправляемый ресурс) ссылается на ресурс, который не отслеживается или управляется стеком развертывания, но по-прежнему существует в Azure.

Чтобы указать Azure удалить неуправляемые ресурсы, обновите стек с помощью команды создания стека одним из следующих флагов удаления. Дополнительные сведения см. в разделе "Создание стека развертывания".

  • DeleteAll: используйте удаление, а не отсоедините для управляемых ресурсов и групп ресурсов.
  • DeleteResources: используйте удаление, а не отсоединение только для управляемых ресурсов.
  • DeleteResourceGroups: используйте удаление, а не отсоединение только для управляемых групп ресурсов. Недопустимо использовать DeleteResourceGroups сам по себе. DeleteResourceGroups необходимо использовать вместе с DeleteResources.

Например:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -DeleteResourceGroups `
  -DeleteResources

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

При удалении групп ресурсов с DeleteAllDeleteResourceGroups помощью либо свойств управляемые группы ресурсов и все ресурсы, содержащиеся в них, также будут удалены.

Удаление стеков развертывания

При выполнении команд удаления без флагов удаления неуправляемые ресурсы будут отсоединяться, но не удаляться. Чтобы удалить неуправляемые ресурсы, используйте следующие параметры:

  • DeleteAll: удалите как ресурсы, так и группы ресурсов.
  • DeleteResources: удалите только ресурсы.
  • DeleteResourceGroups: удалите только группы ресурсов.

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

Чтобы удалить ресурсы стека развертывания в группе ресурсов область:

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

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

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Чтобы удалить ресурсы стека развертывания в группе управления область:

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Просмотр управляемых ресурсов в стеке развертывания

Во время общедоступной предварительной версии служба стека развертывания еще не имеет графического пользовательского интерфейса (GUI) портал Azure. Чтобы просмотреть управляемые ресурсы в стеке развертывания, используйте следующие команды Azure Powershell или Azure CLI:

Чтобы просмотреть управляемые ресурсы в группе ресурсов область:

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

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

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Чтобы просмотреть управляемые ресурсы в группе управления область:

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Добавление ресурсов в стек развертывания

Чтобы добавить управляемый ресурс, добавьте определение ресурса в базовые файлы Bicep, а затем выполните команду обновления или повторно выполните команду create. Дополнительные сведения см. в статье об обновлении стеков развертывания.

Удаление управляемых ресурсов из стека развертывания

Чтобы удалить управляемый ресурс, удалите определение ресурса из базовых файлов Bicep, а затем выполните команду обновления или повторно выполните команду создания. Дополнительные сведения см. в статье об обновлении стеков развертывания.

Защита управляемых ресурсов от удаления

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

Azure PowerShell включает следующие параметры для настройки назначения запрета:

  • DenySettingsMode: определяет операции, которые запрещены для управляемых ресурсов для защиты от несанкционированных субъектов безопасности, пытающихся удалить или обновить их. Это ограничение применяется ко всем пользователям, если только явно не предоставлен доступ. К значениям относятся: None, DenyDeleteи DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: запретить параметры применяются к вложенным ресурсам в управляемых ресурсах.
  • DenySettingsExcludedAction: список операций управления на основе ролей, исключенных из параметров запрета. Разрешено до 200 действий.
  • DenySettingsExcludedPrincipal: список идентификаторов субъектов Microsoft Entra, исключенных из блокировки. Разрешено до пяти субъектов.

Чтобы применить параметры запрета в группе ресурсов область:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

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

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

DeploymentResourceGroupName Используйте параметр, чтобы указать имя группы ресурсов, в которой создается стек развертывания. Если область не указан, используется область стека развертывания.

Чтобы применить параметры запрета в группе управления область:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

DeploymentSubscriptionId Используйте параметр, чтобы указать идентификатор подписки, в которой создается стек развертывания. Если область не указан, используется область стека развертывания.

Отключение управляемых ресурсов из стека развертывания

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

Экспорт шаблонов из стеков развертывания

Ресурсы из стека развертывания можно экспортировать в выходные данные JSON. Выходные данные можно передать в файл.

Чтобы экспортировать стек развертывания в группе ресурсов область:

Save-AzResourceGroupDeploymentStack `
   -Name '<deployment-stack-name>' `
   -ResourceGroupName '<resource-group-name>' `

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

Save-AzSubscriptionDeploymentStack `
  -name '<deployment-stack-name>'

Экспорт стека развертывания в группе управления область:

Save-AzManagmentGroupDeploymentStack `
  -Name '<deployment-stack-name>' `
  -ManagementGroupId '<management-group-id>'

Следующие шаги

Сведения о кратком руководстве см . в кратком руководстве по созданию стека развертывания.