Pilhas de implantação (Visualização)

Uma pilha de implantação do Azure é um tipo de recurso do Azure que permite o gerenciamento de um grupo de recursos do Azure como uma unidade atômica. Quando um arquivo Bicep ou um modelo JSON ARM é enviado para uma pilha de implantação, ele define os recursos que são gerenciados pela pilha. Se um recurso que foi incluído anteriormente no modelo for removido, ele será desanexado ou excluído com base no comportamento actionOnUnmanage especificado da pilha de implantação. Semelhante a outros recursos do Azure, o acesso à pilha de implantação pode ser restrito usando o controle de acesso baseado em função do Azure (Azure RBAC).

Para criar e atualizar uma pilha de implantação, você pode utilizar a CLI do Azure, o Azure PowerShell ou o portal do Azure junto com arquivos Bicep. Esses arquivos Bicep são transempilhados em modelos JSON ARM, que são então implantados como um objeto de implantação pela pilha. A pilha de implantação oferece recursos adicionais além dos recursos de implantação familiares, servindo como um superconjunto desses recursos.

Microsoft.Resources/deploymentStacks é o tipo de recurso para pilhas de implantação. Ele consiste em um modelo principal que pode executar atualizações de 1 para muitos em todos os escopos para os recursos que descreve e bloquear quaisquer alterações indesejadas nesses recursos.

Ao planejar sua implantação e determinar quais grupos de recursos devem fazer parte da mesma pilha, é importante considerar o ciclo de vida de gerenciamento desses recursos, que inclui criação, atualização e exclusão. Por exemplo, suponha que você precise provisionar algumas VMs de teste para várias equipes de aplicativos em diferentes escopos de grupo de recursos. Nesse caso, uma pilha de implantação pode ser utilizada para criar esses ambientes de teste e atualizar as configurações de VM de teste por meio de atualizações subsequentes para a pilha de implantação. Depois de concluir o projeto, pode ser necessário remover ou excluir quaisquer recursos que foram criados, como as VMs de teste. Utilizando uma pilha de implantação, os recursos gerenciados podem ser facilmente removidos especificando o sinalizador de exclusão apropriado. Essa abordagem simplificada economiza tempo durante a limpeza do ambiente, pois envolve uma única atualização para o recurso de pilha, em vez de modificar ou remover individualmente cada VM de teste em vários escopos de grupo de recursos.

As pilhas de implantação exigem o Azure PowerShell versão 10.1.0 ou posterior ou a CLI do Azure versão 2.50.0 ou posterior.

Para criar sua primeira pilha de implantação, trabalhe com Guia de início rápido: criar pilha de implantação.

Por que usar pilhas de implantação?

As pilhas de implantação oferecem os seguintes benefícios:

  • Provisionamento simplificado e gerenciamento de recursos em diferentes escopos como uma entidade coesa.
  • Impedir modificações indesejadas nos recursos gerenciados por meio de configurações de negação.
  • Limpeza eficiente do ambiente empregando sinalizadores de exclusão durante as atualizações da pilha de implantação.
  • Utilizando modelos padrão, como Bicep, modelos ARM ou especificações de modelo para suas pilhas de implantação.

Limitações conhecidas

  • Os recursos criados implicitamente não são gerenciados pela pilha. Portanto, nenhuma negação de atribuições ou limpeza é possível.
  • Negar atribuições não suporta tags.
  • Não há suporte para negar atribuições no escopo do grupo de gerenciamento.
  • As pilhas de implantação não podem excluir segredos do cofre de chaves. Se você estiver removendo segredos do cofre de chaves de um modelo, certifique-se de executar também o comando update/delete da pilha de implantação com o modo de desanexação.

Problemas conhecidos

  • Atualmente, a exclusão de grupos de recursos ignora as atribuições de negação. Ao criar uma pilha de implantação no escopo do grupo de recursos, o arquivo Bicep não contém a definição para o grupo de recursos. Apesar da configuração de atribuição de negação, é possível excluir o grupo de recursos e sua pilha contida. No entanto, se um bloqueio estiver ativo em qualquer recurso dentro do grupo, a operação de exclusão falhará.
  • As hipóteses não estão disponíveis na pré-visualização .
  • Uma pilha com escopo de grupo de gerenciamento é impedida de implantar em outro grupo de gerenciamento. Ele só pode ser implantado no grupo de gerenciamento da própria pilha ou em uma assinatura filho.

Criar pilhas de implantação

Um recurso de pilha de implantação pode ser criado no escopo do grupo de recursos, da assinatura ou do grupo de gerenciamento. O modelo passado para uma pilha de implantação define os recursos a serem criados ou atualizados no escopo de destino especificado para a implantação do modelo.

  • Uma pilha no escopo do grupo de recursos pode implantar o modelo passado para o mesmo escopo do grupo de recursos onde a pilha de implantação existe.
  • Uma pilha no escopo de assinatura pode implantar o modelo passado para um escopo de grupo de recursos (se especificado) ou o mesmo escopo de assinatura onde a pilha de implantação existe.
  • Uma pilha no escopo do grupo de gerenciamento pode implantar o modelo passado para o escopo de assinatura especificado.

É importante observar que, onde existe uma pilha de implantação, a atribuição de negação também é criada com o recurso de configurações de negação. Por exemplo, criando uma pilha de implantação no escopo da assinatura que implanta o modelo no escopo do grupo de recursos e com o modo DenyDeletede configurações de negação, você pode facilmente provisionar recursos gerenciados para o grupo de recursos especificado e bloquear tentativas de exclusão para esses recursos. Usando essa abordagem, você também aumenta a segurança da pilha de implantação separando-a no nível de assinatura, em oposição ao nível do grupo de recursos. Essa separação garante que as equipes de desenvolvedores que trabalham com os recursos provisionados tenham apenas visibilidade e acesso de gravação aos grupos de recursos, enquanto a pilha de implantação permanece isolada em um nível mais alto. Isso minimiza o número de usuários que podem editar uma pilha de implantação e fazer alterações em sua atribuição de negação. Para obter mais informações, consulte Proteger o recurso gerenciado contra exclusão.

Os comandos create-stack também podem ser usados para atualizar pilhas de implantação.

Para criar uma pilha de implantação no escopo do grupo de recursos:

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

Para criar uma pilha de implantação no escopo da assinatura:

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

O DeploymentResourceGroupName parâmetro especifica o grupo de recursos usado para armazenar os recursos gerenciados. Se o parâmetro não for especificado, os recursos gerenciados serão armazenados no escopo da assinatura.

Para criar uma pilha de implantação no escopo do grupo de gerenciamento:

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

O deploymentSubscriptionId parâmetro especifica a assinatura usada para armazenar os recursos gerenciados. Se o parâmetro não for especificado, os recursos gerenciados serão armazenados no escopo do grupo de gerenciamento.

Listar pilhas de implantação

Para listar recursos da pilha de implantação no escopo do grupo de recursos:

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

Para listar recursos da pilha de implantação no escopo da assinatura:

Get-AzSubscriptionDeploymentStack

Para listar recursos da pilha de implantação no escopo do grupo de gerenciamento:

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

Atualizar pilhas de implantação

Para atualizar uma pilha de implantação, que pode envolver a adição ou exclusão de um recurso gerenciado, você precisa fazer alterações nos arquivos Bicep subjacentes. Depois que as modificações forem feitas, você terá duas opções para atualizar a pilha de implantação: executar o comando update ou executar novamente o comando create.

A lista de recursos gerenciados pode ser totalmente controlada através do padrão de projeto de infraestrutura como código (IaC).

Usar o comando Definir

Para atualizar uma pilha de implantação no escopo do grupo de recursos:

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

Para atualizar uma pilha de implantação no escopo da assinatura:

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

O DeploymentResourceGroupName parâmetro especifica o grupo de recursos usado para armazenar os recursos da pilha de implantação. Se você não especificar um nome de grupo de recursos, o serviço de pilha de implantação criará um novo grupo de recursos para você.

Para atualizar uma pilha de implantação no escopo do grupo de gerenciamento:

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

Use o comando Novo

Você recebe um aviso semelhante ao seguinte:

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)

Para obter mais informações, consulte Criar pilhas de implantação.

Controle o descolamento e a exclusão

Um recurso desanexado (ou recurso não gerenciado) refere-se a um recurso que não é rastreado ou gerenciado pela pilha de implantação, mas ainda existe no Azure.

Para instruir o Azure a excluir recursos não gerenciados, atualize a pilha com o comando create stack com um dos seguintes sinalizadores de exclusão. Para obter mais informações, consulte Criar pilha de implantação.

  • DeleteAll: use excluir em vez de desanexar para recursos gerenciados e grupos de recursos.
  • DeleteResources: use excluir em vez de desanexar apenas para recursos gerenciados.
  • DeleteResourceGroups: use excluir em vez de desanexar apenas para grupos de recursos gerenciados. É inválido usar DeleteResourceGroups por si só. DeleteResourceGroups deve ser utilizado em conjunto com DeleteResources.

Por exemplo:

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

Aviso

Ao excluir grupos de recursos com as DeleteAll propriedades ou DeleteResourceGroups , os grupos de recursos gerenciados e todos os recursos contidos neles também serão excluídos.

Excluir pilhas de implantação

Se você executar os comandos delete sem os sinalizadores delete, os recursos não gerenciados serão desanexados, mas não excluídos. Para excluir os recursos não gerenciados, use as seguintes opções:

  • DeleteAll: Exclua os recursos e os grupos de recursos.
  • DeleteResources: Exclua apenas os recursos.
  • DeleteResourceGroups: exclua somente os grupos de recursos.

Mesmo que você especifique a opção excluir tudo, se houver recursos não gerenciados dentro do grupo de recursos onde a pilha de implantação está localizada, tanto o recurso não gerenciado quanto o próprio grupo de recursos não serão excluídos.

Para excluir recursos da pilha de implantação no escopo do grupo de recursos:

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

Para excluir recursos da pilha de implantação no escopo da assinatura:

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

Para excluir recursos da pilha de implantação no escopo do grupo de gerenciamento:

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

Exibir recursos gerenciados na pilha de implantação

Durante a visualização pública, o serviço de pilha de implantação ainda não tem uma interface gráfica do usuário (GUI) do portal do Azure. Para exibir os recursos gerenciados dentro de uma pilha de implantação, use os seguintes comandos do Azure Powershell/CLI do Azure:

Para exibir recursos gerenciados no escopo do grupo de recursos:

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

Para exibir recursos gerenciados no escopo da assinatura:

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

Para exibir recursos gerenciados no escopo do grupo de gerenciamento:

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

Adicionar recursos à pilha de implantação

Para adicionar um recurso gerenciado, adicione a definição de recurso aos arquivos Bicep subjacentes e execute o comando update ou execute novamente o comando create. Para obter mais informações, consulte Atualizar pilhas de implantação.

Excluir recursos gerenciados da pilha de implantação

Para excluir um recurso gerenciado, remova a definição de recurso dos arquivos Bicep subjacentes e execute o comando update ou execute novamente o comando create. Para obter mais informações, consulte Atualizar pilhas de implantação.

Proteja os recursos gerenciados contra exclusão

Ao criar uma pilha de implantação, é possível atribuir um tipo específico de permissões aos recursos gerenciados, o que impede sua exclusão por entidades de segurança não autorizadas. Essas configurações são chamadas de configurações de negação. Você deseja armazenar a pilha em um escopo pai.

O Azure PowerShell inclui estes parâmetros para personalizar a atribuição de negação:

  • DenySettingsMode: Define as operações que são proibidas nos recursos gerenciados para proteção contra entidades de segurança não autorizadas que tentam excluí-las ou atualizá-las. Esta restrição aplica-se a todos, a menos que o acesso seja explicitamente concedido. Os valores incluem: None, DenyDeletee DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: As configurações de negação são aplicadas a recursos aninhados em recursos gerenciados.
  • DenySettingsExcludedAction: Lista de operações de gerenciamento baseadas em função que são excluídas das configurações de negação. São permitidas até 200 ações.
  • DenySettingsExcludedPrincipal: Lista de IDs principais do Microsoft Entra excluídas do bloqueio. São permitidos até cinco diretores.

Para aplicar configurações de negação no escopo do grupo de recursos:

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>"

Para aplicar configurações de negação no escopo da assinatura:

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>"

Use o DeploymentResourceGroupName parâmetro para especificar o nome do grupo de recursos no qual a pilha de implantação é criada. Se um escopo não for especificado, ele usará o escopo da pilha de implantação.

Para aplicar configurações de negação no escopo do grupo de gerenciamento:

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>"

Use o DeploymentSubscriptionId parâmetro para especificar a ID da assinatura na qual a pilha de implantação é criada. Se um escopo não for especificado, ele usará o escopo da pilha de implantação.

Desanexar recursos gerenciados da pilha de implantação

Por padrão, as pilhas de implantação desanexam e não excluem recursos não gerenciados quando eles não estão mais contidos no escopo de gerenciamento da pilha. Para obter mais informações, consulte Atualizar pilhas de implantação.

Exportar modelos de pilhas de implantação

Você pode exportar os recursos de uma pilha de implantação para uma saída JSON. Você pode canalizar a saída para um arquivo.

Para exportar uma pilha de implantação no escopo do grupo de recursos:

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

Para exportar uma pilha de implantação no escopo da assinatura:

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

Para exportar uma pilha de implantação no escopo do grupo de gerenciamento:

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

Próximos passos

Para passar por um início rápido, consulte Guia de início rápido: criar uma pilha de implantação.