Pilhas de implantação (versão prévia)

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 do ARM é enviado para uma pilha de implantação, ele define os recursos 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 (RBAC do Azure).

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 transpilados em modelos JSON do ARM, que sã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 entre escopos para os recursos descritos 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 todos os recursos que foram criados, como as VMs de teste. Ao utilizar 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, examine 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 em recursos gerenciados por meio de configurações de negação.
  • Limpeza eficiente do ambiente empregando sinalizadores de exclusão durante atualizações de pilha de implantação.
  • Utilizando modelos padrão, como Bicep, modelos do 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 atribuição de negação ou limpeza é possível.
  • As atribuições de negação não dão suporte a marcas.
  • Não há suporte para atribuições de negação 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, execute também o comando de atualização/exclusão da pilha de implantação com o modo de desanexação.

Problemas conhecidos

  • A exclusão de grupos de recursos ignora atualmente 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 a pilha contida nele. No entanto, se um bloqueio estiver ativo em qualquer recurso dentro do grupo, a operação de exclusão falhará.
  • O teste de hipóteses não está disponível na versão prévia.
  • Uma pilha com escopo de grupo de gerenciamento é restrita à implantação em outro grupo de gerenciamento. Ele só pode ser implantado no grupo de gerenciamento da pilha em si 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 em que a pilha de implantação existe.
  • Uma pilha no escopo da assinatura pode implantar o modelo passado para um escopo de grupo de recursos (se especificado) ou o mesmo escopo de assinatura em que a pilha de implantação existe.
  • Uma pilha no escopo do grupo de gerenciamento pode implantar o modelo passado para o escopo da assinatura especificado.

É importante observar que onde existe uma pilha de implantação, assim como a atribuição de negação criada com a funcionalidade 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 de configurações de negação DenyDelete, você pode provisionar facilmente recursos gerenciados para o grupo de recursos especificado e bloquear tentativas de exclusão para esses recursos. Ao usar essa abordagem, você também aprimora a segurança da pilha de implantação separando-a no nível da assinatura, em vez do 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, confira 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 parâmetro DeploymentResourceGroupName 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 parâmetro deploymentSubscriptionId 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 de pilha de implantação no escopo do grupo de recursos:

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

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

Get-AzSubscriptionDeploymentStack

Para listar recursos de 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 por meio do padrão de design de infraestrutura como código (IaC).

Usar o comando Set

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 parâmetro DeploymentResourceGroupName 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 saber mais, confira Criar pilhas de implantação.

Desanexação e exclusão de controle

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 sinalizadores de exclusão a seguir. Para saber mais, confira 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, somente para recursos gerenciados.
  • DeleteResourceGroups: use excluir, em vez de desanexar, somente para grupos de recursos gerenciados. É inválido usar DeleteResourceGroups por si só. DeleteResourceGroups deve ser usado junto 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 propriedades DeleteAll 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 de exclusão sem os sinalizadores de exclusão, 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: excluir os recursos e os grupos de recursos.
  • DeleteResources: excluir os recursos.
  • DeleteResourceGroups: excluir somente o grupo de recursos.

Mesmo que você especifique a opção excluir todos, se houver recursos não gerenciados no grupo de recursos em que a pilha de implantação está localizada, o recurso não gerenciado e 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 versão prévia 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 saber mais, confira 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 saber mais, confira Atualizar pilhas de implantação.

Proteger 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 conhecidas como configurações de negação. Você deseja armazenar a pilha em um escopo pai.

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

  • DenySettingsMode: define as operações proibidas nos recursos gerenciados para proteger contra entidades de segurança não autorizadas que tentam excluí-las ou atualizá-las. Essa restrição se aplica a todos, a menos que tenha acesso explicitamente concedido. Esses valores incluem None, DenyDelete, e 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 excluídas das configurações de negação. Até 200 ações são permitidas.
  • DenySettingsExcludedPrincipal: lista de IDs da entidade de segurança do Microsoft Entra excluídas do bloqueio. Até cinco entidades de segurança são permitidas.

Para aplicar as 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 as 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 parâmetro DeploymentResourceGroupName 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 as 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 parâmetro DeploymentSubscriptionId 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 não estão mais contidos no escopo de gerenciamento da pilha. Para saber mais, confira 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 redirecionar 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óximas etapas

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