Amazon EBSのsnapshotをローテートする
Amazon EBSの機能でスナップショットを取得し、バックアップとして保管したいとする。(スナップショットを取得するとそのままS3にストレージされる。このあたりの仕組みがどうなっているのかさっぱりわからんが)バックアップなので当然指定世代数でローテートしたい。Pythonのライブラリなど利用するのがいいらしいが、、、スクラッチからPythonをお勉強してる時間はない。結局シェルでガリガリ書くはめになるのか。。以下は複数のマシンを対象にしたスクリプト(殆どパクリである)。一応動く、と思うが・・・。
#!/bin/bash
GEN=6 ←世代数指定
for h in xxxx wwww yyy zzz qqq; do ←対象サーバを列挙。
BACKUP=`ec2-describe-snapshots | sort -k5 -r | grep $h | awk ‘{print $2}’`
COUNT=1
for snapshot in $BACKUP; do
if [ ${COUNT} -le ${GEN} ]; then
:
else
ec2-delete-snapshot $snapshot
fi
COUNT=`expr $COUNT +1`
done
done
“sort -k5 -r”の箇所は、コマンド実行結果時刻の列でソートをかけている。
対象サーバが膨大になってきたら、別ファイルにリスト化するとよい。
追記
ここではEC2アカウントKEYの指定などしていないが(本来必要)、別ファイルにアカウント関連の情報を定義しておいて、シェルの冒頭でsourceとかで読み込ませるようにすればいいと思う。