はじめに
Google Cloud Platformでcompute engineを定期スナップショットを取得したい。
2019年12月19日追記
→もっと簡単な方法があったので、サクッと終らせたい方はこちらを参照してください。
概要
毎日夜間にスナップショットを取得
7日以上前のスナップショットは削除
環境
クラウド:Google Cloud Platform
OS:CentOS 8
tool:Google Cloud SDK
Google Cloud SDKの使い方が不明な方はこちらを参照されたい。
使い方とか
インスタンスの一覧取得
[google@ap-srv1 ~]$ gcloud compute instances list
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
ap-srv1 asia-northeast1-a f1-micro 192.168.5.3 xx.xx.xxx.xxx RUNNING
ap-srv2 asia-northeast1-a g1-small 192.168.5.4 xx.xx.xxx.xxx RUNNING
web-srv1 asia-northeast1-a g1-small 192.168.5.7 xx.xx.xxx.xxx RUNNING
インスタンス一覧からフィルタ指定してインスタンスを絞る
例:「web」で始まるインスタンスのみ表示
[google@ap-srv1 ~]$ gcloud compute instances list --filter="name ~ ^web"
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
web-srv1 asia-northeast1-a g1-small 192.168.5.7 xx.xx.xxx.xxx RUNNING
その他の使い方については、本家googleの解説ページを参照されたい。
手動でスナップショットを取得
まずは手動でスナップショットを取得してみる。
コマンドはこう
gcloud compute disks snapshot -q インスタンス名 --zone=ゾーン名 --snapshot-names=スナップショット名
[google@ap-srv1 ~]$ gcloud compute disks snapshot -q ap-srv1 --zone=asia-northeast1-a --snapshot-names=temporary-snapshot-20191213
Creating snapshot(s) temporary-snapshot-20191213...done.
できてるか確認
[google@ap-srv1 ~]$ gcloud compute snapshots list --filter="name ~ ^temp"
NAME DISK_SIZE_GB SRC_DISK STATUS
temporary-snapshot-20191213 100 asia-northeast1-b/disks/server1 READY
できてるみたい。
手動でスナップショットを削除
[google@ap-srv1 ~]$ gcloud compute snapshots delete temporary-snapshot-20191213
The following snapshots will be deleted:
- [temporary-snapshot-20191213]
Do you want to continue (Y/n)? Y
Deleted [https://www.googleapis.com/compute/v1/projects/yourproject-000000/global/snapshots/temporary-snapshot-20191213].
削除できたけど、続けて良いか確認が入るみたいなので、オプションにquietをつける。
gcloud compute snapshots delete temporary-snapshot-20191213 --quiet
確認なしで、削除されるようになったが、7日以上前のやつを削除したいので、以下のコマンドでタイムスタンプを取得
gcloud compute snapshots list --filter="creationTimestamp<YYYYmmdd"
さらにuriを指定して削除できるようなので、uriオプションをつけて、削除対象をフィルタする。
gcloud compute snapshots list --filter="creationTimestamp<YYYYmmdd" --uri
スクリプトを作成
INSTANCE_NAME=ap-srv1
SNAPSHOT_ZONE_NAME=asia-northeast1-a
DAYS_OLD="$(date -d "-7 days" +%Y%m%d)"
# create the snapshot
gcloud compute disks snapshot -q ${INSTANCE_NAME} --zone=${SNAPSHOT_ZONE_NAME} --snapshot-names=${INSTANCE_NAME}-`date +'%Y%m%d'`
#
# DELETE OLD SNAPSHOTS (OLDER THAN 7 DAYS)
#
gcloud compute snapshots list --filter="creationTimestamp<$DAYS_OLD" --uri | while read SNAPSHOT_URI; do
#echo $SNAPSHOT_URI
gcloud compute snapshots delete $SNAPSHOT_URI
done
スクリプトをcrontabに登録すると、定期的にスナップショットが取得できるようになりました。
終わりに
GCPコンソールでも確認した。
よし。ちゃんと出来てるようだ。
…
ん?!
コンソールから出来るようになったんかいっ!
知らなかったな~、も~