In this article, I am going to show you how to keep the resources and the snapshots alive even after you delete the CloudFormation stacks.
By default, AWS CloudFormation deletes all stack resources, and the data that was stored in your stack (unless you take manual snapshots). For example, data stored in Amazon EC2 Volumes, Amazon RDS DBInstances, and Amazon Redshift Cluster resources.
But what if you want to retain your data for you may need your data to be migrated to another stack or you do not want anyone to delete your data unintentionally. In that case, you can specify a DeletionPolicy
for that particular resource you want to retain, in your CloudFormation template. This will preserve your data even after your stack is deleted.
The behaviour of the DeletionPolicy is different with the resources and the resources with a snapshot
. I am going to show you how for both the cases.
Please visit my GitHub Repository for RDS articles on various topics being updated on constant basis.
Let’s get started!
1. Resources with a DeletionPolicy
(S3bucket)
When you launch a CloudFormation stack with this template snippet, it creates an Amazon S3 bucket.
However when the stack is deleted, the CloudFormation will delete the stack and all the stack resources except for the S3 bucket.
You have to delete S3 bucket manually to avoid any costs being billed if you do not need that bucket for later use.
You can specify
retain
with any AWS resource with such a template.
Objectives:
1. Create a AWS CloudFormation Sample Template File -
S3_Bucket_With_Retain_On_Delete.yaml
2. Create an AWS CloudFormation Stack mys3stack
with that template file
3. Go to S3 Dashboard to see the bucket
4. Delete the stack mys3stack
5. Check to see S3 bucket still retained
Pre-requisites:
- AWS user account with admin access, not a root account to AWS Management Console
Resources Used:
Steps for implementation to this project:
1. Create a AWS CloudFormation Sample Template File
S3_Bucket_With_Retain_On_Delete.yaml
AWSTemplateFormatVersion: '2010-09-09'
Metadata:
License: Apache-2.0
Description: 'AWS CloudFormation Sample Template S3_Bucket_With_Retain_On_Delete: Sample template showing how to create a publicly accessible S3 bucket with a deletion policy of retain on delete. It will create an S3 bucket that will NOT be deleted when the stack is deleted. You have to delete the S3 bucket from the S3 dashboard after the Template is deleted in order to save costs.'
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
DeletionPolicy: Retain
Outputs:
WebsiteURL:
Value: !GetAtt [S3Bucket, WebsiteURL]
Description: URL for website hosted on S3
S3BucketSecureURL:
Value: !Join ['', ['https://', !GetAtt [S3Bucket, DomainName]]]
Description: Name of S3 bucket to hold website content
2. Create an AWS CloudFormation Stack mys3stack
with that template file
- On CloudFormation Dashboard / Create stack
- Create Stack / Specify template / Prerequisite - Prepare template / Check Upload a Template file / Upload
S3_Bucket_With_Retain_On_Delete.yaml
Next
- Specify stack details / Stack name /
Stack name - mys3stack
Next
- Take all the defaults, review the details for mys3stack and
Submit
3. Go to S3 Dashboard to see the bucket
After the CloudFormation Stack is completed, Go to the S3 Dashboard to see the bucket
4. Delete the stack
mys3stack
- From the CloudFormation Dashboard, Delete the stack
mys3stack
5. Check to see S3 bucket still retained
However S3 bucket is not deleted automatically, you have to delete it manually
2. Resources with a snapshot DeletionPolicy
(RDS DBInstance)
When you launch a CloudFormation stack with this template snippet, it creates a RDS DBInstance and an Amazon S3 bucket.
However when the stack is deleted, the CloudFormation will create a snapshot of the RDS DBInstance and then deletes the stack and all the stack resources (RDS DBInstance) except for snapshot and the S3 bucket.
The name of the snapshot will include the stack name, the logical ID of the database instance, and other identifying information.
You have to delete snapshot and S3 bucket manually to avoid any costs being billed if you do not need them for later use.
You can only create snapshots of resources that support snapshots, such as the AWS::EC2::Volume, AWS::RDS::DBInstance, and AWS::Redshift::Cluster resources with such a template.
Objectives:
1. Create an AWS CloudFormation Sample Template File -
RDS_Snapshot_On_Delete.yaml
2. Create an AWS CloudFormation Stack myrdsstack
with that template file
3. Go to RDS Dashboard to see the RDS DBInstance and the snapshot
4. Go to S3 Dashboard to see the S3 bucket
5. Delete the stack myrdsstack
6. Check to see the snapshot still retained and delete it manually
7. Check to see the S3 bucket still retained and delete it manually
Pre-requisites:
- AWS user account with admin access, not a root account to AWS Management Console
Resources Used:
Steps for implementation to this project:
1. Create an AWS CloudFormation Sample Template File
RDS_Snapshot_On_Delete.yaml
AWSTemplateFormatVersion: '2010-09-09'
Metadata:
License: Apache-2.0
Description: 'AWS CloudFormation Sample Template RDS_Snapshot_On_Delete: Sample template
showing how to create an RDS DBInstance and upon deletion keeps the snapshot alive from stack deletion.
You have to delete the snapshot manually to save costs.'
Resources:
MyDB:
Type: AWS::RDS::DBInstance
Properties:
DBName: MyDatabase
AllocatedStorage: '5'
DBInstanceClass: db.t2.small
Engine: MySQL
MasterUsername: myName
MasterUserPassword: myPassword
DeletionPolicy: Snapshot
Outputs:
JDBCConnectionString:
Description: JDBC connection string for the database
Value: !Join ['', ['jdbc:mysql://', !GetAtt [MyDB, Endpoint.Address], ':', !GetAtt [
MyDB, Endpoint.Port], /MyDatabase]]
2. Create an AWS CloudFormation Stack myrdsstack
with that template file
- On CloudFormation Dashboard / Create stack
- Create Stack / Specify template / Prerequisite - Prepare template / Check Upload a Template file / Upload
RDS_Snapshot_On_Delete.yaml
Next
- Specify stack details / Stack name /
Stack name - myrdsstack
Next
Take all the defaults, review the details for myrdsstack and
Submit
- It takes 4-5 min to create a RDS Database Instance and the snapshot
3. Go to RDS Dashboard to see the RDS DBInstance and the snapshot
- After the CloudFormation Stack is completed, Go to the RDS Dashboard to see the instance and the snapshot
4. Go to S3 Dashboard to see the S3 bucket
- It will also create a s3 bucket, because when I have uploaded a template file, it will create a S3 URL where it is stored
5. Delete the stack myrdsstack
From the CloudFormation Dashboard, delete the
myrdsstack
You have to wait 4-5 min to see it's completion.
6. Check to see the snapshot still retained and delete it manually
However, RDS Instance is deleted automatically. The snapshot is still alive, you have to delete it manually
7. Check to see the S3 bucket still retained and delete it manually
S3 bucket also should be deleted manually
Cleanup
Delete the CloudFormation stacks
Delete S3 Bucket
Delete RDS DBInstance
Delete Snapshot
What we have done so far
Demonstrated how a DeletionPolicy
behaves differently with AWS resources and AWS resources with a snapshot. It is a great way to preserve your data after a CloudFormation stack is deleted.
Top comments (0)