EBSのスナップショットを作成し、古いスナップショットを自動削除するスクリプトを書いたのでメモがてら残します。
このスクリプトを実行するインスタンスのすべてのボリュームに対して、EXPIRE_DAYS日数経過したスナップショットを削除し、EBSスナップショットを作成します。
あ、credentials は ~/.aws/credentials にある前提です。
#!/bin/sh
# ------------------------------------------
# configuration
EXPIRE_DAYS=4
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
EXPIRE_DATE=`date +%Y-%m-%dT%H:%M:%S.0000Z -d "-${EXPIRE_DAYS}day"`
# ------------------------------------------
# script start
STATUS=0
for VOL_ID in `aws ec2 describe-volumes --filters "Name=attachment.instance-id,Values=${INSTANCE_ID}" | grep -e '^VOLUMES' | awk '{ print $9 }'`
do
# delete old snapshots
for SNAPSHOT in `aws ec2 describe-snapshots --filters "Name=volume-id,Values=${VOL_ID}" | grep ${VOL_ID} | awk '{ print $8","$9 }'`
do
SNAPSHOT_ID=`echo $SNAPSHOT | awk -F"," '{ print $1 }'`
CREATE_DATE=`echo $SNAPSHOT | awk -F"," '{ print $2 }'`
# delete expired snapshot.
if [[ "$EXPIRE_DATE" > "$CREATE_DATE" ]]; then
aws ec2 delete-snapshot --snapshot-id $SNAPSHOT_ID > /dev/null
RESULT=$?
if [ $RESULT -ne 0 ]; then
echo "delete for snapshot failed... ($SNAPSHOT_ID, $CREATE_DATE, ${RESULT})"
STATUS=1
fi
fi
done
# create snapshot.
aws ec2 create-snapshot --volume-id ${VOL_ID} --description "`date +%Y-%m-%d` snapshot instance-id:${INSTANCE_ID}" > /dev/null
RESULT=$?
if [ $RESULT -ne 0 ]; then
echo "create for snapshot failed... (${RESULT})"
STATUS=2
fi
done
exit $STATUS