There is the rub: you need to have those snapshots, and if you are paranoid like me you need to have them taken regularly. AWS doesn't really have a great facility to manage your snapshots. What I wanted was a way to take a weekly snapshot of all of my drives, but only keep the snapshots for a month so as not to clutter my snapshot list. This post is to share my script that I have written to manage these snapshots.
This is actually really a simple script. I'm going to drop it in here, and then tell you how it works:
#!/bin/bash export EC2_HOME=/opt/aws/apitools/ec2 export JAVA_HOME=/usr/lib/jvm/jre export SNAPSHOT_LIST=/var/spool/snapshots VOLUMES=$(/opt/aws/bin/ec2-describe-volumes | sed 's/ /-/g' | grep TAG | cut -f 3,5 --output-delimiter='|') for line in ${VOLUMES//\\n/$cr} do VOLUME=`echo $line | cut -f 1 --delimiter='|'` NAME=`echo $line | cut -f 2 --delimiter='|'`-`date "+%m-%d-%y"` SNAP=`/opt/aws/bin/ec2-create-snapshot --description $NAME $VOLUME | cut -f 2` echo $SNAP > $SNAPSHOT_LIST/$SNAP echo $NAME snapshot to $SNAP done echo echo # Purge old snapshots find $SNAPSHOT_LIST -ctime +30 -type f -execdir /usr/local/bin/delete_snapshot {} \;
First we're setting some variables needed by the amazon tools. The third entry for SNAPSHOT_LIST is a folder that I'm going to use to keep track of my snapshots. You'll need to create this folder and give access to the user you'll have run this script.
Next, I'm calling ec2-describe-volumes to retrieve all of the volumes in my EC2 area. I'm replacing spaces with a hyphen, looking for the TAG line, and using cut to get the volume and volume name. One feature of this script is that it will only snapshot volumes that you have named - so if you have something temporary you can leave its volume unnamed. You certainly could modify this script to do every volume, but you'd have to come up with some way to make the snapshots make sense as to where they came from. Here, we are naming the snapshot after the volume name and stamping the date to the end of it.
Next, we execute ec2-create-snapshot to create the snapshot for our volume, and storing it in a file in our snapshot list folder. We'll use this file list to see how old our snapshots are, which you see in the last line where we are finding any files in our snapshot list that are older than 30 days. We're executing /usr/local/bin/delete_snapshot which is the second script in our system:
#!/bin/bash # Receives a file that contains the snapshot-id that we want to delete SNAP=`cat $1` echo Deleting snapshot $SNAP /opt/aws/bin/ec2-delete-snapshot $SNAP rm $1
This one is pretty easy, we're grabbing the snapshot id from the file (which also happens to be the file name) and executing ec2-delete-snapshot to delete it. Then we're removing the file.
I have this set to run every monday morning. It does a very nice job of keeping one month's supply of snapshots should something catastrophic happen.
This comment has been removed by a blog administrator.
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDelete