View a markdown version of this page

Automatize a exclusão de AWS CloudFormation pilhas e recursos associados - Recomendações da AWS

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:

    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

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.

As fases que descobrem, processam e excluem CloudFormation pilhas e seus recursos associados.

O diagrama mostra o seguinte fluxo de trabalho:

  1. 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.

  2. 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 DeletionProtectionEnabled das tabelas do DynamoDB é alterada para False. Na interface de linha de comandos, para cada recurso, você recebe um prompt perguntando se deseja ignorar a restrição.

  3. 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.

  4. 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-cleanuprepositório.

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

TarefaDescriptionHabilidades necessárias

Clonar o repositório.

  1. Crie uma pasta no seu ambiente virtual. Nomeie-a com o nome do seu projeto.

  2. Abra um terminal em sua máquina local e acesse essa pasta.

  3. Digite o comando a seguir para clonar o cloudformation-stack-cleanuprepositório no diretório do seu projeto:

    git clone https://github.com/aws-samples/cloudformation-stack-cleanup.git
DevOps engenheiro

Instale o Poetry.

Siga as instruções, apresentadas na documentação do Poetry, para instalar o Poetry no ambiente virtual de destino.

DevOps engenheiro

Instale as dependências.

  1. Insira o seguinte comando para acessar o diretório do projeto:

    cd cloudformation-stack-cleanup
  2. Digite o comando:

    poetry install

    Isso instala todas as dependências necessárias, como Boto3, click e o código-fonte da CLI. CloudFormation

DevOps engenheiro

(Opcional) Instale o Pyenv.

Siga as instruções (GitHub) para instalar o Pyenv.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Crie funções que coletem, processem previamente e excluam os recursos de destino.

  1. No repositório clonado, insira o seguinte comando para acessar o diretório cli:

    cd cfncli/cli
  2. Abra o arquivo cleanup_enviornment.py.

  3. Crie uma nova função em Python que reúna o tipo de recurso que você deseja modificar. Para obter um exemplo, consulte a função gather_ddb_tables presente neste arquivo.

  4. Crie uma nova função em Python que substitua as restrições de serviço para o recurso de destino. Para obter um exemplo, consulte a função remove_ddb_deletion_protection presente neste arquivo.

  5. Crie uma nova função em Python que colete os recursos de destino que não são gerenciados. Para obter um exemplo, consulte a função gather_log_groups presente neste arquivo.

  6. Crie uma nova função em Python que exclua os recursos de destino que não são gerenciados. Para obter um exemplo, consulte a função delete_log_group presente neste arquivo.

  7. Salve e feche o arquivo cleanup_enviornment.py.

DevOps engenheiro, Python
TarefaDescriptionHabilidades necessárias

Crie uma CloudFormation pilha.

  1. Navegue até o diretório de projeto do .

  2. Insira o comando a seguir para criar uma CloudFormation pilha que provisiona uma tabela do DynamoDB e um grupo de segurança. Atualize o valor para <VPCID>:

    aws cloudformation create-stack \ --stack-name sampleforcleanup-Stack \ --template-body file://samples/sample-cfn-stack.yaml \ --parameters ParameterKey=VpcId,ParameterValue=<VPCID> \ --region us-east-1
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 ssm put-parameter \ --name "/sampleforcleanup/database/password" \ --value "your_db_password" \ --type "SecureString" \ --description "Database password for my app" \ --tier "Standard" \ --region "us-east-1"
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 s3api create-bucket \ --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \ --region us-east-1 \ --create-bucket-configuration LocationConstraint=us-east-1
AWS DevOps
TarefaDescriptionHabilidades necessárias

Exclua a CloudFormation pilha.

  1. Insira o seguinte comando para excluir a CloudFormation pilha de amostras, o parâmetro Systems Manager e o bucket do Amazon S3 que você criou:

    cfncli --region us-east-1 \ dev cleanup-env \ --prefix-list sampleforcleanup
  2. Quando solicitado, digite Y para continuar.

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

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']