Amazon EBSのsnapshotをローテートする

10月 12, 2011

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とかで読み込ませるようにすればいいと思う。


Categories: Amazon EC2