GCPのCompute Engineで定期スナップショットを取得する


はじめに

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

スクリプトを作成

snapshot.sh
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コンソールでも確認した。

よし。ちゃんと出来てるようだ。

ん?!

コンソールから出来るようになったんかいっ!

知らなかったな~、も~