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

# はじめに
Google Cloud Platformでcompute engineを定期スナップショットを取得したい。

**2019年12月19日追記**
→もっと簡単な方法があったので、サクッと終らせたい方は[こちら](https://qiita.com/average_nobody/items/425ea5f3a2fe528851e7)を参照してください。

### 概要
毎日夜間にスナップショットを取得
7日以上前のスナップショットは削除

## 環境
クラウド:Google Cloud Platform
OS:CentOS 8
tool:Google Cloud SDK

Google Cloud SDKの使い方が不明な方は[こちら](https://qiita.com/average_nobody/items/87eb9ab434ab9d9f8637)を参照されたい。

# 使い方とか

インスタンスの一覧取得

```
[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の解説ページ](https://cloud.google.com/compute/docs/gcloud-compute/?hl=ja#try)を参照されたい。

## 手動でスナップショットを取得

まずは手動でスナップショットを取得してみる。

コマンドはこう
gcloud compute disks snapshot -q <I>インスタンス名</I> --zone=<I>ゾーン名</I> --snapshot-names=<I>スナップショット名</I>


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527863/bacb7d7a-1d89-60d8-91c8-04c7bd097857.png)

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

…

ん？！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527863/995081e7-686b-3b8c-b8be-eb538972f92a.png)

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

https://cloud.google.com/compute/docs/disks/scheduled-snapshots?hl=ja

知らなかったな～、も～