Olá pessoal!
Ao excluir uma stack do AWS CloudFormation, uma instância EC2 criada por ela normalmente também é excluída. Para preservar essa instância, defina o atributo DeletionPolicy com o valor Retain no template YAML.
Essa configuração permite remover a stack e manter o recurso disponível. É útil quando uma instância precisa continuar em uso após o encerramento do gerenciamento pela stack.
Como configurar DeletionPolicy: Retain
O atributo deve ficar na definição do recurso, no mesmo nível de Type e Properties. Veja este trecho de exemplo:
Resources: MinhaInstancia: Type: AWS::EC2::Instance DeletionPolicy: Retain Properties: ImageId: ami-xxxxxxxxxxxxxxxxx InstanceType: t3.micro Tags: - Key: Name Value: servidor-aplicacao
O código é um trecho para adaptar ao seu template. Substitua o ImageId por uma AMI (Amazon Machine Image ou Imagem de Máquina da Amazon) válida na região utilizada e mantenha as configurações de rede, segurança e demais propriedades exigidas pelo ambiente.
Se a stack já existe, atualize-a com o atributo e aguarde a conclusão da atualização antes de solicitar a exclusão.
O que acontece com a instância
Com DeletionPolicy: Retain, a instância permanece após a exclusão da stack e deixa de ser gerenciada por ela. Os custos aplicáveis continuam existindo enquanto o recurso for mantido.
A configuração também vale quando a definição do recurso é removida do template durante uma atualização. Entretanto, ela não controla a retenção de um recurso substituído por outro em uma atualização.
E quando uma atualização substitui a instância?
Para preservar a instância antiga quando uma alteração exige sua substituição, utilize UpdateReplacePolicy: Retain:
Resources: MinhaInstancia: Type: AWS::EC2::Instance DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: ImageId: ami-xxxxxxxxxxxxxxxxx InstanceType: t3.micro
Os atributos atendem a situações diferentes: DeletionPolicy controla a retenção na exclusão; UpdateReplacePolicy controla o destino do recurso antigo quando ocorre uma substituição.
Nesse segundo cenário, o CloudFormation cria a nova instância e mantém a anterior fora do gerenciamento da stack, com possíveis custos adicionais. A configuração não impede que a substituição aconteça.
Cuidados antes de excluir a stack
A retenção é configurada por recurso. Portanto, revise também os demais componentes do template: preservar a instância não significa preservar automaticamente todos os recursos necessários ao seu funcionamento.
Antes da exclusão, registre o ID da instância, confira suas dependências e defina quem ficará responsável por administrá-la. A retenção também deve fazer parte do planejamento de custos e de backup.
Para maiores informações, consulte a documentação oficial dos atributos DeletionPolicy e UpdateReplacePolicy e para complementar a organização dos recursos, veja também o post que escrevi sobre como definir tags para instâncias EC2 no YAML.
Até a próxima!
