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