Deleting Old EBS Snapshots

This is a plain and simple way to manage old mysql EBS snapshots. Maintain the latest five recent snapshots of a specific volume. You don’t want to mess with other existing volume snapshots, right? 🙂

1. Install Eric Hammond’s ec2-consistent snapshot

codename=$(lsb_release -cs)
echo "deb $codename main" |
sudo tee /etc/apt/sources.list.d/alestic-ppa.list
sudo apt-key adv --keyserver --recv-keys BE09C571
sudo apt-get update
sudo apt-get install -y ec2-consistent-snapshot
sudo PERL_MM_USE_DEFAULT=1 cpan Net::Amazon::EC2

2. Copy the lines below to a file $HOME/.my.cnf, (make sure to change file permission to read only using chmod 600)


3. Just copy your AWS access and secret key to $HOME/.awssecret separated by a linefeed.(make sure to change file permission to read only using chmod 600)


4. Download Tim Kay’s AWS tool and make the file executable.

    sudo wget -O   /usr/local/sbin/aws
    sudo chmod +x /usr/local/sbin/aws

Updated 12/13-2010: URL for Tim Kay’s aws program.

5. Setup a cronjob. Adjust cronjob to your backup schedules. If you want to maintain 10 snapshots, replace the 5 at sed command. The one-liner code was posted here.

# to snapshot your mysql
0 0 * * * /usr/bin/ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-XXXXXX >> /mnt/backup.log  2>&1
# Delete the last 5 old snapshots.
0 2 * * * /usr/local/sbin/aws dsnap | grep vol-XXXXXXX | sort -r -k 5  | sed 1,5d | awk '{print "Deleting snapshot: " $2 " Dated:" $8}; system("/usr/local/sbin/aws delsnap " $2 )'  >>  /mnt/backup.log  2>&1

Code Updated fixing redirection.

I’m using Eric Hammond’s Ubuntu Jaunty: ami-ed46a784 for this setup. Note that this ami-ed46a784 is using an older kernel with bug that pose possible access to root account in a multiuser environment.

New Releases of Ubuntu Images for Amazon EC2 (Kernels, Security, Tools, PPA, runurl)
New 2.6.21 kernel+modules: XFS breaks on Ubuntu Hardy, Intrepid

7 thoughts on “Deleting Old EBS Snapshots

  1. Pingback: Amazon Relational Data Service

  2. Peregrinator

    It’s worth noting that placing .my.cnf and .awssecret in $HOME will lead to them getting bundled with any AMI you create from that server.

    To prevent accidental exposure of the secret keys and passwords should you make that AMI public I would recommend placing them in /mnt and symlinking them to the $HOME directory.

    ln -s /mnt/.my.cnf /home/ubuntu/.my.cnf
    ln -s /mnt/.awssecret /home/ubuntu/.awssecret

  3. rodney Post author


    Good point.

    Another note is for multi user server, these files even if they are at /mnt must be secured also for read only on root and no access to other users which is easily be fixed using chmod command.

    It’s always best to review and double check your private AMI settings before making them public.

  4. rodney Post author

    You can create an image of a Windows instance via the AWS Management Console but I don’t know how to do it on Windows system. Maybe a scheduled task on Windows can make a daily snapshot.

  5. Pingback: » Script to automate creation and management of EC2 EBS snapshots

Leave a Reply

Your email address will not be published. Required fields are marked *