Skip to content

Instantly share code, notes, and snippets.

@lucasferreira
Created November 19, 2017 19:47
Show Gist options
  • Save lucasferreira/2c62e0753501ed7334aab243ae657783 to your computer and use it in GitHub Desktop.
Save lucasferreira/2c62e0753501ed7334aab243ae657783 to your computer and use it in GitHub Desktop.
Simple bash script to run a snapshot backup at AWS EC2 Instance
#!/bin/bash
# Volume list file will have volume-id:Volume-name format
VOLUMES_LIST=/var/log/volumes-list
SNAPSHOT_INFO=/var/log/snapshot_info
DATE=`date +%Y-%m-%d`
REGION="sa-east-1" # change for your region
# Snapshots Retention Period for each volume snapshot
RETENTION=6
SNAP_CREATION=/var/log/snap_creation
SNAP_DELETION=/var/log/snap_deletion
EMAIL_LIST=youremail@fornotification.com #change for your e-mail
echo "List of Snapshots Creation Status" > $SNAP_CREATION
echo "List of Snapshots Deletion Status" > $SNAP_DELETION
# Check whether the volumes list file is available or not?
if [ -f $VOLUMES_LIST ]; then
# Creating Snapshot for each volume using for loop
for VOL_INFO in `cat $VOLUMES_LIST`
do
# Getting the Volume ID and Volume Name into the Separate Variables.
VOL_ID=`echo $VOL_INFO | awk -F":" '{print $1}'`
VOL_NAME=`echo $VOL_INFO | awk -F":" '{print $2}'`
# Creating the Snapshot of the Volumes with Proper Description.
DESCRIPTION="Auto_${VOL_NAME}_${DATE}"
/usr/bin/aws ec2 create-snapshot --volume-id $VOL_ID --description "$DESCRIPTION" --region $REGION &>> $SNAP_CREATION
done
else
echo "Volumes list file is not available: $VOLUMES_LIST Exiting." | mail -s "Snapshots Creation Status" $EMAIL_LIST
exit 1
fi
echo >> $SNAP_CREATION
echo >> $SNAP_CREATION
# Deleting the Snapshots which are 10 days old.
for VOL_INFO in `cat $VOLUMES_LIST`
do
# Getting the Volume ID and Volume Name into the Separate Variables.
VOL_ID=`echo $VOL_INFO | awk -F":" '{print $1}'`
VOL_NAME=`echo $VOL_INFO | awk -F":" '{print $2}'`
# Getting the Snapshot details of each volume.
/usr/bin/aws ec2 describe-snapshots --query 'Snapshots[*].[SnapshotId,VolumeId,Description,StartTime]' --output text --filters "Name=status,Values=completed" "Name=volume-id,Values=$VOL_ID" | grep -v "CreateImage" > $SNAPSHOT_INFO
# Snapshots Retention Period Checking and if it crosses delete them.
while read SNAP_INFO
do
SNAP_ID=`echo $SNAP_INFO | awk '{print $1}'`
echo $SNAP_ID
SNAP_DATE=`echo $SNAP_INFO | awk '{print $4}' | awk -F"T" '{print $1}'`
echo $SNAP_DATE
# Getting the no.of days difference between a snapshot and present day.
RETENTION_DIFF=`echo $(($(($(date -d "$DATE" "+%s") - $(date -d "$SNAP_DATE" "+%s"))) / 86400))`
echo $RETENTION_DIFF
# Deleting the Snapshots which are older than the Retention Period
if [ $RETENTION -lt $RETENTION_DIFF ];
then
/usr/bin/aws ec2 delete-snapshot --snapshot-id $SNAP_ID --region $REGION --output text > /tmp/snap_del
echo DELETING $SNAP_INFO >> $SNAP_DELETION
fi
done < $SNAPSHOT_INFO
done
echo >> $SNAP_DELETION
# Merging the Snap Creation and Deletion Data
cat $SNAP_CREATION $SNAP_DELETION > /var/log/mail_report
# Sending the mail Update
cat /var/log/mail_report | mail -s "Volume Snapshots Status" $EMAIL_LIST
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment