Quero excluir pilhas novas e pilhas já existentes do AWS CloudFormation, mas não quero excluir todos os recursos das pilhas.
Resumo
Para manter alguns recursos ao excluir uma pilha, insira o atributo DeletionPolicy no modelo do CloudFormation.
Antes de excluir a pilha, defina Reter, Captura de tela ou Excluir como política para cada recurso que você quiser manter:
- Reter mantém o recurso caso a pilha seja excluída.
- Captura de tela cria uma captura de tela do recurso antes de sua exclusão.
Observação: só é possível usar essa política em recursos compatíveis com capturas de tela.
- Excluir exclui o recurso junto com a pilha.
Observação: a exclusão do recurso é o padrão caso você não defina uma DeletionPolicy.
Resolução
As etapas a seguir mostram como definir a política Reter no atributo DeletionPolicy para que os recursos não sejam excluídos juntos com a pilha do CloudFormation.
Especificar o atributo DeletionPolicy e seu valor no modelo do AWS CloudFormation
No modelo do CloudFormation, insira Reter como valor de DeletionPolicy nos recursos que você quiser manter. Nos seguintes exemplos em JSON e YAML, a política Reter foi definida para os recursos de AWS::EC2::SecurityGroup no modelo.
JSON:
{
"Description": "AWS CloudFormation DeletionPolicy demo",
"Resources": {
"SGroup1": {
"Type": "AWS::EC2::SecurityGroup",
"DeletionPolicy": "Retain",
"Properties": {
"GroupDescription": "EC2 Instance access"
}
},
"SGroup2": {
"Type": "AWS::EC2::SecurityGroup",
"DeletionPolicy": "Retain",
"Properties": {
"GroupDescription": "EC2 Instance access"
}
},
"SGroup1Ingress": {
"Type": "AWS::EC2::SecurityGroupIngress",
"DeletionPolicy": "Retain",
"Properties": {
"GroupName": {
"Ref": "SGroup1"
},
"IpProtocol": "tcp",
"ToPort": "80",
"FromPort": "80",
"CidrIp": "0.0.0.0/0"
}
},
"SGroup2Ingress": {
"Type": "AWS::EC2::SecurityGroupIngress",
"DeletionPolicy": "Retain",
"Properties": {
"GroupName": {
"Ref": "SGroup2"
},
"IpProtocol": "tcp",
"ToPort": "80",
"FromPort": "80",
"CidrIp": "0.0.0.0/0"
}
}
}
}
YAML:
Description: AWS CloudFormation DeletionPolicy demo
Resources:
SGroup1:
Type: 'AWS::EC2::SecurityGroup'
DeletionPolicy: Retain
Properties:
GroupDescription: EC2 Instance access
SGroup2:
Type: 'AWS::EC2::SecurityGroup'
DeletionPolicy: Retain
Properties:
GroupDescription: EC2 Instance access
SGroup1Ingress:
Type: 'AWS::EC2::SecurityGroupIngress'
DeletionPolicy: Retain
Properties:
GroupName: !Ref SGroup1
IpProtocol: tcp
ToPort: '80'
FromPort: '80'
CidrIp: 0.0.0.0/0
SGroup2Ingress:
Type: 'AWS::EC2::SecurityGroupIngress'
DeletionPolicy: Retain
Properties:
GroupName: !Ref SGroup2
IpProtocol: tcp
ToPort: '80'
FromPort: '80'
CidrIp: 0.0.0.0/0
Fazer upload do modelo atualizado no CloudFormation
- Abra o console do AWS CloudFormation.
- Se deseja usar o modelo em uma nova pilha, escolha Criar pilha. Se deseja usá‑lo em uma pilha já existente, selecione a pilha e escolha Atualizar pilha.
- Em Escolher um modelo, selecione Fazer upload de um modelo no Amazon S3. Em seguida, escolha o modelo do CloudFormation que você atualizou inserindo as políticas de exclusão.
- Escolha Avançar.
- Se estiver criando uma pilha, dê um nome a ela em Nome da pilha. Depois, escolha Avançar.
- Na página Opções, selecione as opções que forem pertinentes à pilha. Em seguida, escolha Avançar.
- Escolha Criar.
Testar a política do DeletionPolicy
- Exclua a pilha do AWS CloudFormation.
- Confira se os recursos para os quais você definiu o atributo DeletionPolicy com a política Reter ainda existem depois que a exclusão da pilha for concluída. É possível conferir os recursos em seus respectivos serviços usando o Console de Gerenciamento da AWS ou a AWS CLI.
Por exemplo, você pode conferir se a política Reter dos modelos anteriores funcionou. Conclua as etapas a seguir após excluir a pilha do CloudFormation se quiser verificar.
- Abra o console do Amazon EC2.
- Escolha Grupos de segurança na seção Rede e segurança do painel de navegação.
- Confira se os grupos de segurança com a política Reter anexada continuam disponíveis.
Informações relacionadas
Criar uma pilha no console do AWS CloudFormation
Como evito que os recursos na minha pilha do CloudFormation sejam excluídos ou atualizados?