As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Automatize a exclusão de AWS CloudFormation pilhas e recursos associados
Sandeep Singh e James Jacob, Amazon Web Services
Resumo
O AWS CloudFormation é um serviço amplamente usado para gerenciar a infraestrutura como código (IaC) da nuvem. Ao usar CloudFormation, você gerencia os recursos relacionados como uma única unidade chamada pilha. Você pode criar, atualizar e excluir um conjunto de recursos criando, atualizando e excluindo pilhas.
Às vezes, você não precisa mais dos recursos em uma CloudFormation pilha. Dependendo dos recursos e das respectivas configurações, remover uma pilha e os recursos associados pode ser uma tarefa complexa. Em sistemas de produção do mundo real, as exclusões às vezes falham ou demoram muito devido a condições ou restrições conflitantes que não podem ser substituídas. CloudFormation Pode ser necessário planejamento e execução cuidadosos para garantir que todos os recursos sejam devidamente excluídos, de maneira consistente e eficiente. Esse padrão descreve como configurar uma estrutura que ajuda você a gerenciar a exclusão de CloudFormation pilhas que envolvem as seguintes complexidades:
Recursos com proteção contra exclusão: alguns recursos podem ter a proteção contra exclusão habilitada. Exemplos comuns desses recursos são tabelas do Amazon DynamoDB e buckets do Amazon Simple Storage Service (Amazon S3). A proteção contra exclusão impede a exclusão automática, como a exclusão por meio de. CloudFormation Caso deseje remover esses recursos, você deve, manualmente ou por meio de programação, desabilitar temporariamente ou sobrescrever a proteção contra exclusão. Antes de prosseguir, você deve refletir cuidadosamente sobre os impactos da exclusão desses recursos.
Recursos com políticas de retenção — Certos recursos, como chaves AWS Key Management Service (AWS KMS) e buckets do Amazon S3, podem ter políticas de retenção que especificam por quanto tempo eles devem ser retidos após a solicitação da exclusão. Essas políticas devem ser consideradas na estratégia de limpeza para garantir conformidade com as políticas organizacionais e com os requisitos regulatórios.
Exclusão demorada de funções do Lambda que estão anexadas a uma VPC: a exclusão de uma função do AWS Lambda que está anexada a uma nuvem privada virtual (VPC) pode demorar de 5 a 40 minutos, dependendo das diversas dependências interconectadas envolvidas no processo. Se você desanexar a função da VPC antes de excluir a pilha, é possível reduzir esse tempo para menos de 1 minuto.
Recursos não criados diretamente por CloudFormation — Em determinados designs de aplicativos, os recursos podem ser criados fora da CloudFormation pilha original, seja pelo próprio aplicativo ou por recursos provisionados por meio da pilha. Veja os dois exemplos a seguir:
CloudFormation pode provisionar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) que executa um script de dados do usuário. Em seguida, esse script pode criar um parâmetro do AWS Systems Manager para armazenar dados relacionados à aplicação. Esse parâmetro não é gerenciado por meio de CloudFormation.
CloudFormation pode provisionar uma função Lambda que gera automaticamente um grupo Amazon CloudWatch Logs para armazenar registros. Esse grupo de registros não é gerenciado por meio de CloudFormation.
Embora esses recursos não sejam gerenciados diretamente pelo CloudFormation, eles geralmente precisam ser limpos quando a pilha é excluída. Caso não sejam gerenciados, esses recursos podem ficar órfãos e gerar consumo desnecessário de recursos.
Embora essas barreiras de proteção possam gerar complexidade, elas são intencionais e essenciais. CloudFormation Permitir ignorar todas as restrições e excluir recursos indiscriminadamente pode levar a consequências prejudiciais e imprevistas em muitos cenários. No entanto, como DevOps engenheiro de nuvem responsável pelo gerenciamento do ambiente, às vezes pode ser necessário ignorar essas restrições, principalmente em ambientes de desenvolvimento, teste ou preparação.
Resultados de negócios desejados
Com a implementação desta estrutura, você poderá aproveitar os seguintes benefícios:
Gerenciamento de custos — a limpeza regular e eficiente de ambientes temporários, como end-to-end ambientes de teste de aceitação de usuários, ajuda a evitar que os recursos funcionem por mais tempo do que o necessário. Isso pode reduzir os custos de forma significativa.
Segurança — A limpeza automatizada de recursos desatualizados ou não utilizados reduz a superfície de ataque e ajuda a manter um ambiente seguro AWS .
Eficiência operacional: a limpeza regular e automatizada pode fornecer os seguintes benefícios operacionais:
Scripts automatizados que removem grupos de logs antigos ou buckets do Amazon S3 vazios podem aumentar a eficiência operacional, mantendo o ambiente organizado e fácil de gerenciar.
Excluir e recriar pilhas rapidamente permite iterações ágeis no projeto e na implementação, resultando em uma arquitetura mais robusta e resiliente.
A exclusão e a reconstrução frequente de ambientes ajudam a identificar e corrigir problemas potenciais. Isso contribui para garantir que a infraestrutura seja capaz de lidar com situações reais.
Pré-requisitos e limitações
Pré-requisitos
Um ativo Conta da AWS
Python, versão 3.6 ou versões posteriores, instalado
AWS Command Line Interface (AWS CLI), instalado e configurado
Limitações
Uma convenção de nomenclatura é usada para identificar os recursos que devem ser excluídos. O código de amostra deste padrão usa um prefixo no nome do recurso, mas você pode definir sua própria convenção de nomenclatura. Os recursos que não seguem essa convenção não serão identificados nem excluídos.
Arquitetura
O diagrama a seguir mostra como essa estrutura identifica a CloudFormation pilha de destino e os recursos adicionais associados a ela.

O diagrama mostra o seguinte fluxo de trabalho:
Reúna recursos — A estrutura de automação usa uma convenção de nomenclatura para retornar todas as CloudFormation pilhas relevantes, repositórios do Amazon Elastic Container Registry (Amazon ECR), tabelas do DynamoDB e buckets do Amazon S3.
nota
As funções deste estágio usam paginadores
, um recurso do Boto3 que abstrai o processo de iteração sobre um conjunto de resultados de API truncado. Isso garante que todos os recursos sejam processados. Para otimizar ainda mais o desempenho, considere aplicar a filtragem do lado do servidor ou considere usá-la JMESPath para realizar a filtragem do lado do cliente. Pré-processamento — A estrutura de automação identifica e aborda as restrições de serviço que devem ser substituídas para permitir a exclusão dos recursos. CloudFormation Por exemplo, a configuração
DeletionProtectionEnableddas tabelas do DynamoDB é alterada paraFalse. Na interface de linha de comandos, para cada recurso, você recebe um prompt perguntando se deseja ignorar a restrição.Excluir pilha — A estrutura de automação exclui a CloudFormation pilha. Na interface de linha de comandos, você recebe um prompt perguntando se deseja excluir a pilha.
Pós-processamento — a estrutura de automação exclui todos os recursos relacionados que não foram provisionados diretamente CloudFormation como parte da pilha. Exemplos desses tipos de recursos incluem parâmetros e grupos de CloudWatch registros do Systems Manager. As funções separadas reúnem esses recursos, realizam o processamento prévio e, em seguida, os excluem. Na interface de linha de comandos, para cada recurso, você recebe um prompt perguntando se deseja excluir o recurso.
nota
As funções deste estágio usam paginadores
, um recurso do Boto3 que abstrai o processo de iteração sobre um conjunto de resultados de API truncado. Isso garante que todos os recursos sejam processados. Para otimizar ainda mais o desempenho, considere aplicar a filtragem do lado do servidor ou considere usá-la JMESPath para realizar a filtragem do lado do cliente.
Automação e escala
Se sua CloudFormation pilha incluir outros recursos que não estão incluídos no código de amostra ou se a pilha tiver uma restrição que não tenha sido tratada nesse padrão, você poderá adaptar a estrutura de automação para seu caso de uso. Adote a mesma sequência metodológica para coletar recursos, realizar o processamento prévio, excluir a pilha e, depois, executar o processamento posterior.
Ferramentas
Serviços da AWS
AWS CloudFormationajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS
CloudFormation A Interface de Linha de Comando (CFN-CLI) é uma ferramenta de código aberto que ajuda você a desenvolver e testar extensões de terceiros AWS e, em seguida, registrá-las para uso em. CloudFormation
AWS SDK para Python (Boto3)
é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS
Outras ferramentas
O Click
é uma ferramenta em Python que auxilia na criação de interfaces de linha de comandos. O Poetry
é uma ferramenta para gerenciamento de dependências e empacotamento em Python. O Pyenv
é uma ferramenta que ajuda a gerenciar e alternar entre diferentes versões do Python. Python
é uma linguagem de programação de computador de uso geral.
Repositório de código
O código desse padrão está disponível no GitHub cloudformation-stack-cleanup
Práticas recomendadas
Marque os recursos para facilitar a identificação: implemente uma estratégia de marcação
para identificar recursos criados para diferentes ambientes e finalidades. As etiquetas podem simplificar o processo de limpeza, ajudando a filtrar os recursos com base nas suas marcações. Defina ciclos de vida dos recursos: estabeleça ciclos de vida para os recursos a fim de excluí-los automaticamente após um determinado período. Essa prática ajuda a garantir que ambientes temporários não gerem custos permanentes.
Épicos
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Clonar o repositório. |
| DevOps engenheiro |
Instale o Poetry. | Siga as instruções | DevOps engenheiro |
Instale as dependências. |
| DevOps engenheiro |
(Opcional) Instale o Pyenv. | Siga as instruções | DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Crie funções que coletem, processem previamente e excluam os recursos de destino. |
| DevOps engenheiro, Python |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Crie uma CloudFormation pilha. |
| AWS DevOps |
Crie um parâmetro do Systems Manager. | Digite o comando a seguir para criar um parâmetro do Systems Manager que não seja provisionado por meio de: CloudFormation
| AWS DevOps |
Crie um bucket do Amazon S3. | Insira o seguinte comando para criar um bucket do Amazon S3 que não seja provisionado por meio de: CloudFormation
| AWS DevOps |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Exclua a CloudFormation pilha. |
| AWS DevOps |
Valide a exclusão dos recursos. | Na saída, confirme se todos os recursos de amostra foram excluídos. Para obter uma saída de amostra, consulte a seção Recursos adicionais deste padrão. | AWS DevOps |
Recursos relacionados
Excluir uma pilha (CloudFormation documentação)
Solução de problemas CloudFormation (CloudFormation documentação)
Conceder acesso a funções do Lambda para recursos em uma Amazon VPC (documentação do Lambda)
Como excluo uma AWS CloudFormation pilha que está presa no status DELETE_FAILED?
(Centro de AWS conhecimento)
Mais informações
A seguir, apresentamos uma saída de amostra produzida pelo comando cfncli:
cfncli --region aus-east-1 dev cleanup-env --prefix-list sampleforcleanup https://sts.us-east-1.amazonaws.com Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1 Do you want to proceed? [Y/n]: Y No S3 buckets No ECR repositories No Lambda functions in VPC The following DynamoDB tables will have their deletion protection removed: sampleforcleanup-MyDynamoDBTable Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'. The following CloudFormation stacks will be deleted: sampleforcleanup-Stack Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack` Waiting for stack `sampleforcleanup-Stack` to be deleted... CloudFormation stack `sampleforcleanup-Stack` deleted successfully. The following ssm_params will be deleted: /sampleforcleanup/database/password Do you want to proceed with deleting these ssm_params? [Y/n]: Y Deleted SSM Parameter: /sampleforcleanup/database/password Cleaned up: ['sampleforcleanup']