Question: How do I retain some of my resources when I delete an AWS CloudFormation stack?

I want to delete a new or existing AWS CloudFormation stack, but I don’t want to delete all the stack's resources. How can I keep some of its resources and still delete the stack?Short descriptionTo keep certain resources when you delete a stack, use the DeletionPolicy attribute in your CloudFormation template.Before you delete a stack, make sure that you specify the Retain, Snapshot, or Delete policy option for each resource that you want to keep:The Retain option keeps the resource in case there's a stack deletion.The Snapshot option creates a snapshot of the resource before that resource is deleted.Note: This option is available only for resources that support snapshots.The Delete option deletes the resource along with the stack.Note: This option is the default outcome if you don’t set a DeletionPolicy.

ResolutionThe following steps show you how to use the Retain option for DeletionPolicy to prevent the deletion of resources during a CloudFormation stack deletion.Specify the DeletionPolicy attributes in the AWS CloudFormation templateIn your CloudFormation template, enter Retain as the DeletionPolicy for the resources that you want to keep. In the following example JSON and YAML templates, the Retain policy is specified for AWS::EC2::SecurityGroup resources.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 demoResources:  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/0Upload your updated CloudFormation templateOpen the AWS CloudFormation console.For a new stack, choose Create Stack. For an existing stack, select the stack that you want to update, and then choose Update Stack.For Choose a template, select Upload a template to Amazon S3, and then choose the CloudFormation template that you modified to include deletion policies.Choose Next.If you are creating a new stack, for Stack name, enter a name for your stack, and then choose Next.On the Options page, select the appropriate options for your stack, and then choose Next.Choose Create.Test the DeletionPolicy attributeDelete the AWS CloudFormation stack.Confirm that the resources with the Retain option for DeletionPolicy are still available after the stack deletion is complete. You can check the resources in their respective services using the AWS Management Console or the AWS CLI.For example, you can verify the success of the Retain policy for the preceding templates by using the following steps after you deleted the CloudFormation stack.Open the Amazon EC2 console.On the navigation pane in the Network & Security section, choose Security Groups.Confirm that the security groups to with the attached Retain policy are still available.

Related informationCreating a stack on the AWS CloudFormation consoleHow do I prevent the resources in my AWS CloudFormation stack from getting deleted or updated?