

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
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*Sandeep Singh e James Jacob, Amazon Web Services*

## Resumo
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

O [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) é 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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) e buckets do [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) que executa um script de dados do usuário. Em seguida, esse script pode criar um parâmetro do [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) 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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). 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
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Python, versão 3.6 ou versões posteriores, [instalado](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**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
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

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.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


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](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), 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](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) ou considere usá-la JMESPath para realizar a filtragem do lado do cliente.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

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

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

1. **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](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), 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](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) ou considere usá-la JMESPath para realizar a filtragem do lado do cliente.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

**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
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda 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)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) é 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)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é 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](https://click.palletsprojects.com/en/stable/) é uma ferramenta em Python que auxilia na criação de interfaces de linha de comandos.
+ O [Poetry](https://python-poetry.org/docs/) é uma ferramenta para gerenciamento de dependências e empacotamento em Python.
+ O [Pyenv](https://github.com/pyenv/pyenv) é uma ferramenta que ajuda a gerenciar e alternar entre diferentes versões do Python.
+ [Python](https://www.python.org/) é 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](https://github.com/aws-samples/cloudformation-stack-cleanup/)repositório.

## Práticas recomendadas
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Marque os recursos para facilitar a identificação**: implemente uma [estratégia de marcação](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) 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
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

### Instalar as ferramentas
<a name="install-tools"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps engenheiro | 
| Instale o Poetry. | Siga as [instruções](https://python-poetry.org/docs/), apresentadas na documentação do Poetry, para instalar o Poetry no ambiente virtual de destino. | DevOps engenheiro | 
| Instale as dependências. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps engenheiro | 
| (Opcional) Instale o Pyenv. | Siga as [instruções](https://github.com/pyenv/pyenv#installation) (GitHub) para instalar o Pyenv. | DevOps engenheiro | 

### (Opcional) Personalização da estrutura
<a name="optional-customize-the-framework"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie funções que coletem, processem previamente e excluam os recursos de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps engenheiro, Python | 

### Criação de recursos de amostra
<a name="create-sample-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | 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<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | 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<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Exclusão dos recursos de amostra
<a name="delete-the-sample-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | 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](#automate-deletion-cloudformation-stacks-associated-resources-additional) deste padrão. | AWS DevOps | 

## Recursos relacionados
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Excluir uma pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation documentação)
+ [Solução de problemas CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) (CloudFormation documentação)
+ [Conceder acesso a funções do Lambda para recursos em uma Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (documentação do Lambda)
+ [Como excluo uma AWS CloudFormation pilha que está presa no status DELETE\$1FAILED?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Centro de AWS conhecimento)

## Mais informações
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

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