Consistent backup of your EC2 instance

Everyone is aware that whether you are using on-premise or public cloud you need backup of your Virtual Machines or cloud instances.

You can read more about the types of backup here

This script creates the application consistent snapshot of the EBS volume attached with the EC2 Instance by freezing the filesystem like EXT4 and XFS.

The frozen of file system will happen for few seconds and as a precaution the “/” volume will not be attempted to freeze as the critical OS I/O operations will be happening.

So if you are running any application, it is recommended to deploy on non-root volume which is the best practise followed by many companies.

ec2-consistentbackup –description=’My First backup’ –tags=”user=asvignesh;”

Let’s see how the authentication will happen while taking the snapshot

This script actually calls the aws binary which can be installed using the below command

sudo apt install python3-pip && pip3 install –upgrade awscli

As a best practice I don’t recommend the sharing of Access key and secret key to the script, so attach an IAM policy is recommended.

Below is the script and the privilege required.

First create a IAM Policy with the above JSON ( IAM Role.json )

Create Policy Screen

Create a IAM Role with the created policy

After creating the policy, Create a new IAM role for EC2 service with the created Policy

Attach IAM policy to the EC2 Instance

After the creation of Role and Policy, associate the create role and policy with the EC2 instance which you want to create a consistent backup.

  • Right Click on the Target EC2 Instance
  • Click on Attach/Replace IAM Role
  • Choose the IAM Role

Prepare the Guest instance for the backup

ubuntu@ip-172-31-38-177:~$ sudo apt install awscli 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  docutils-common libjbig0 libpaper-utils libpaper1 libtiff5 libwebp6 libwebpdemux2 libwebpmux3 python3-botocore python3-dateutil python3-docutils python3-jmespath python3-olefile
  python3-pil python3-pygments python3-roman python3-rsa python3-s3transfer sgml-base xml-core
Suggested packages:
  docutils-doc fonts-linuxlibertine | ttf-linux-libertine texlive-lang-french texlive-latex-base texlive-latex-recommended python-pil-doc python3-pil-dbg ttf-bitstream-vera sgml-base-doc
  debhelper
The following NEW packages will be installed:
  awscli docutils-common libjbig0 libpaper-utils libpaper1 libtiff5 libwebp6 libwebpdemux2 libwebpmux3 python3-botocore python3-dateutil python3-docutils python3-jmespath python3-olefile
  python3-pil python3-pygments python3-roman python3-rsa python3-s3transfer sgml-base xml-core
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 4299 kB of archives.
After this operation, 39.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Copy the Shell file to the instance and give executable permission to that file.

Then run the command

ubuntu@ip-:~$ ec2-consistentbackup.sh –description=’My First backup’ –tags=”user=asvignesh;”

The command will freeze the file system and create a snapshot of all EBS volume attach with the EC2 Instance with the description and the tags mentioned.

You can schedule the backup to run every 3 hours with this cron job

crontab -e

0 */3 * * * ec2-consistentbackup.sh &> /dev/null


Also published on Medium.

Default image
Vignesh A Sathiyanantham
AWS Certified developer with 8 years of extensive experience working for Cloud and Datacenter solutions and leading a small team in a lean startup based on Bangalore, India

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.