経緯
仕事でGCEのスナップショットを自動で取得するバッチを作成することになったので、備忘録もかねてアップする。
環境
GCEの無料枠を利用してVMインスタンスを構築しておく。
ディスクはCentOS7にした。
#!/bin/bash
# スナップショット作成対象のVMインスタンスのリスト作成
gcloud compute disks list --format='value(name,zone)'| while read DISK_NAME ZONE; do
RETRY_MAX_TIME=3
COUNT=0
SNAPSHOT_NAME=$DISK_NAME-$(date "+%Y-%m-%d")
# スナップショット作成に3回失敗したら次のVMインスタンスのスナップショットを作成する
until [ $COUNT -ge $RETRY_MAX_TIME ]
do
# スナップショット作成
gcloud compute disks snapshot $DISK_NAME --snapshot-names $SNAPSHOT_NAME --zone $ZONE
# スナップショット作成の成否判定のために、対象VMインスタンスのスナップショットの存在確認を行う
listcount=`gcloud compute snapshots list --filter="name=$SNAPSHOT_NAME" --format="value(name)" | wc -l`
if [ $listcount = "1" ]; then
# スナップショット作成に成功した場合、次のVMインスタンスのスナップショットを作成する
break
else
# スナップショット作成に失敗した場合、リトライする
let COUNT++
fi
done
done
補足
① VMインスタンスのリスト取得時に、すべてのVMインスタンスをスナップショット作成対象とするので、作成不要なVMインスタンスがある場合は除外処理を入れる必要がある。
② クーロンで一日一回実行の想定で作成しているが、一日に複数回動かしたい場合はスナップショット作成前に同一スナップショットが存在するか確認する必要がある。