The script itself is fairly straightforward, but took several dry-runs in order to fine tune it so that it would reliably create the snapshots, but more importantly would clear out old snapshots older than 7 days.
You can see the for loop for deleting older snapshots. This is done by parsing snapshot dates, converting the dates to a pure numeric value and comparing said numeric value to a “7 days ago” date variable.
Take a look at the script below, hopefully it will be useful to you! There could be more error checking, but that should be fairly easy to do.
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
 | 
#!/bin/sh 
# EBS Snapshot volume script 
# Written by Star Dot Hosting 
# www.stardothosting.com 
# Constants 
ec2_bin="/opt/aws/bin" 
my_cert="/opt/aws/cert.txt" 
my_key="/opt/aws/key.txt" 
instance_id=`wget -q -O- http://169.254.169.254/latest/meta-data/instance-id` 
# Dates 
datecheck_7d=`date +%Y-%m-%d --date '7 days ago'` 
datecheck_s_7d=`date --date="$datecheck_7d" +%s` 
# Get all volume info and copy to temp file 
$ec2_bin/ec2-describe-volumes -C $my_cert -K $my_key  --filter "attachment.instance-id=$instance_id" > /tmp/volume_info.txt 2>&1 
# Get all snapshot info 
$ec2_bin/ec2-describe-snapshots -C $my_cert -K $my_key | grep "$instance_id" > /tmp/snap_info.txt 2>&1 
# Loop to remove any snapshots older than 7 days 
for obj0 in $(cat /tmp/snap_info.txt) 
do 
        snapshot_name=`cat /tmp/snap_info.txt | grep "$obj0" | awk '{print $2}'` 
        datecheck_old=`cat /tmp/snap_info.txt | grep "$snapshot_name" | awk '{print $5}' | awk -F "T" '{printf "%sn", $1}'` 
        datecheck_s_old=`date "--date=$datecheck_old" +%s` 
#       echo "snapshot name: $snapshot_name" 
#       echo "datecheck 7d : $datecheck_7d" 
#       echo "datecheck 7d s : $datecheck_s_7d" 
#       echo "datecheck old : $datecheck_old" 
#       echo "datecheck old s: $datecheck_s_old" 
        if (( $datecheck_s_old <= $datecheck_s_7d )); 
        then 
                echo "deleting snapshot $snapshot_name ..." 
                $ec2_bin/ec2-delete-snapshot -C $my_cert -K $my_key $snapshot_name 
        else 
                echo "not deleting snapshot $snapshot_name ..." 
        fi 
done 
# Create snapshot 
for volume in $(cat /tmp/volume_info.txt | grep "VOLUME" | awk '{print $2}') 
do 
        description="`hostname`_backup-`date +%Y-%m-%d`" 
        echo "Creating Snapshot for the volume: $volume with description: $description" 
        $ec2_bin/ec2-create-snapshot -C $my_cert -K $my_key -d $description $volume 
done 
 |