タイトルがわかりづらいかも知れませんが、
常にEBSのスナップショットを、例えば3世代といったかたちで、
ローテーションさせて作成するシェルスクリプトです
ってことです。
まず、スナップショットの作成です。
ec2-create-snapshot \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
$EBS_VOLUME
次にスナップショットのIDリストの取得です。
とりあえず、スナップショットリストの取得はこんな感じです。
ec2-describe-snapshots \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE
SNAPSHOT snap-1 vol-0 completed 2009-11-05T07:12:25+0000
SNAPSHOT snap-2 vol-0 completed 2009-11-05T09:20:17+0000
SNAPSHOT snap-3 vol-0 completed 2009-11-05T09:23:41+0000
これを5列目の日付で降順にソートします。
ec2-describe-snapshots \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
| sort -k5 -r
SNAPSHOT snap-3 vol-0 completed 2009-11-05T09:23:41+0000
SNAPSHOT snap-2 vol-0 completed 2009-11-05T09:20:17+0000
SNAPSHOT snap-1 vol-0 completed 2009-11-05T07:12:25+0000
※"-k5"で5列目の日付をソート対象にいして"-r"で降順にしています。
さらに、2列目のスナップショットIDのみにしぼります。
ec2-describe-snapshots \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
| sort -k5 -r | awk '{print $2}'
snap-1
snap-2
snap-3
※"$2"で2列目のみ表示しています。
そして、上記で作成したスナップショットIDリストに対して、
新しい順で世代分はそのまま残し、それより古いものは削除処理をします。
COUNT=1
for SNAPSHOT in $SNAPSHOTS; do
if [ $COUNT -le $EBS_GENERATION ]; then
echo $SNAPSHOT "remained"
else
ec2-delete-snapshot \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
$SNAPSHOT
echo $SNAPSHOT " deleted"
fi
COUNT=`expr $COUNT + 1`
done
最後に、あらためて全スクリプトです。
--------ここから-------
ec2-create-snapshot \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
$EBS_VOLUME
SNAPSHOTS=`ec2-describe-snapshots \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
| sort -k5 -r | awk '{print $2}'`
COUNT=1
for SNAPSHOT in $SNAPSHOTS; do
if [ $COUNT -le $EBS_GENERATION ]; then
echo $SNAPSHOT "remained"
else
ec2-delete-snapshot \
-K $AWS_PRIVATE_KEY \
-C $AWS_CERTIFICATE \
$SNAPSHOT
echo $SNAPSHOT " deleted"
fi
COUNT=`expr $COUNT + 1`
done
--------ここまで--------
AMIに反映しなきゃ。
--------
http://www.suz-lab.com

0 コメント:
コメントを投稿