Quiero eliminar una pila de AWS CloudFormation nueva o existente, pero no quiero eliminar todos los recursos de la pila.
Breve descripción
Para conservar ciertos recursos cuando elimine una pila, utilice el atributo DeletionPolicy en la plantilla de CloudFormation.
Antes de eliminar una pila, asegúrese de especificar la opción de política Retener, Instantánea o Eliminar para cada recurso que desee conservar:
- La opción Retener conserva el recurso en caso de que se elimine una pila.
- La opción Instantánea crea una instantánea del recurso antes de eliminarlo.
Nota: Esta opción solo está disponible para los recursos que admiten instantáneas.
- La opción Eliminar elimina el recurso junto con la pila.
Nota: Esta opción es el resultado predeterminado si no se configura DeletionPolicy.
Solución
En los siguientes pasos se explica cómo usar la opción Retener para DeletionPolicy con el fin de evitar que se eliminen los recursos cuando se elimine una pila de CloudFormation.
Especificación de los atributos DeletionPolicy en la plantilla de AWS CloudFormation
En la plantilla de CloudFormation, introduzca Retener como DeletionPolicy para los recursos que desee conservar. En los siguientes ejemplos de plantillas JSON y YAML se ha especificado la política Retener para los recursos AWS::EC2::SecurityGroup.
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
Carga de la plantilla de CloudFormation actualizada
- Abra la consola de AWS CloudFormation.
- Elija Crear pila para crear una pila nueva. Si la pila que desea actualizar ya existe, selecciónela y, a continuación, elija Actualizar pila.
- En Elegir una plantilla, seleccione Cargar una plantilla en Amazon S3 y, a continuación, elija la plantilla de CloudFormation que ha modificado para que incluya políticas de eliminación.
- Elija Siguiente.
- Si está creando una pila nueva, introduzca un nombre para ella en Nombre de la pila y, a continuación, elija Siguiente.
- En la página Opciones, seleccione las opciones adecuadas para su pila y, a continuación, elija Siguiente.
- Elija Crear.
Prueba del atributo DeletionPolicy
- Elimine la pila de AWS CloudFormation.
- Confirme si los recursos con la opción Retener para DeletionPolicy siguen disponibles una vez completada la eliminación de la pila. Puede comprobar los recursos de sus respectivos servicios mediante la consola de administración de AWS o la AWS CLI.
Por ejemplo, para comprobar si la política Retener ha surtido efecto en el caso de las plantillas anteriores, siga estos pasos después de eliminar la pila de CloudFormation.
- Abra la consola de Amazon EC2.
- En el panel de navegación, en la sección Red y seguridad, elija Grupos de seguridad.
- Confirme si los grupos de seguridad con la política Retener asociada siguen disponibles.
Información relacionada
Creación de una pila en la consola AWS CloudFormation
¿Cómo puedo evitar que los recursos de mi pila de CloudFormation se eliminen o actualicen?