GCEの既存インスタンスからインスタンステンプレートを作りマネージドインスタンスグループを作る

既存インスタンスからインスタンステンプレートを作りマネージドインスタンスグループを作てみた備忘録です。

####既存インスタンスを作るところ
（参考）
https://qiita.com/smallpalace/items/bc07c00d1583dbe53a79

```
mypj=komitest-XXXXXX
myregion=asia-northeast1
mynode1=test-web1	
gcloud compute --project "$mypj" ssh --zone "${myregion}-b" "$mynode1"

vi /etc/sysconfig/selinux
Disabledに更新

# yum install git ansible
```
ちょっとansibleでbaseを入れてから停止してディスクからイメージを作成するなど
(sshまわりの設定してdefaultプロジェクトをcloneして初期設定をしてシャットダウンした）

####ディスクからイメージを作成

```
gcloud compute --project=komitest-XXXXXX images create image-1 --family=test --source-disk=test-web1 --source-disk-zone=asia-northeast1-b
```
####イメージからテンプレートを作成

```
vCPU1(3.5GB)
gcloud beta compute --project=komitest-XXXXXX instance-templates create instance-template-1 \
 --machine-type=n1-standard-1 --network=projects/komitest-XXXXXX/global/networks/default \
 --network-tier=PREMIUM --maintenance-policy=MIGRATE --service-account=xxxxxxxxxxxx-compute＠developer.gserviceaccount.com \
 --scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/source.read_only,https://www.googleapis.com/auth/sqlservice.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/userinfo.email  \
 --tags=http-server,https-server --image=image-1 --image-project=komitest-XXXXXX \
 --boot-disk-size=10GB --boot-disk-type=pd-ssd --boot-disk-device-name=instance-template-1

micro
gcloud beta compute --project=komitest-XXXXXX instance-templates create instance-template-1 --machine-type=f1-micro --network=projects/komitest-XXXXXX/global/networks/default --network-tier=PREMIUM --maintenance-policy=MIGRATE --service-account=xxxxxxxxxxxx-compute＠developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/source.read_only,https://www.googleapis.com/auth/sqlservice.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/userinfo.email --tags=http-server,https-server --image=image-1 --image-project=komitest-XXXXXX --boot-disk-size=10GB --boot-disk-type=pd-standard --boot-disk-device-name=instance-template-1
```
使いそうなAPIエンドポイントを--scopeで有効化してるっぽい。pubsub,sourcerepository,conputeengine,cloudsql,storageなどを一応選んでおいた。

```
gcloud compute instance-templates list
NAME                 MACHINE_TYPE  PREEMPTIBLE  CREATION_TIMESTAMP
instance-template-1  f1-micro                   2018-08-08T22:36:34.079-07:00
```

####テンプレートからインスタンスグループを作成

```
gcloud compute --project "komitest-XXXXXX" instance-groups managed create "instance-group-1" \
 --base-instance-name "instance-group-1" --template "instance-template-1" --size "1" --zone "asia-northeast1-b"
```
####オートスケーリングポリシー作成

```
gcloud compute --project "komitest-XXXXXX" instance-groups managed set-autoscaling "instance-group-1" \
 --zone "asia-northeast1-b" --cool-down-period "60" --max-num-replicas "3" --min-num-replicas "1" --target-cpu-utilization "0.6"
```

これをlbのバックエンドにすると勝手にスケールされると思われる。
指標はCPUだけではなく他に3種類ほどありStackdriverなども選べるようだった。（CPU60%だと最大1でも気軽にいつの間にかさし変わる動きをしてた。）


https://qiita.com/chase0213/items/6cad4475a5b57895aca1#%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%8B%E3%82%89%E4%BD%9C%E6%88%90

つくったインスタンスグループの画面にいくと、グループを編集、ローリング更新、ローリング再起動などのボタンが出ていて便利そうかなと思いました。

たとえばテンプレート設定のときにSSDとかインスタンスのスペックとか選べるので、別のテンプレつくるか更新してグループ編集してからスケールアップのためにローリング更新とかそういうのにも使うっぽいですね。

ローリング更新画面はテンプレート差し替えるとかカナリアリリースのためにテンプレート追加するとか、一度に入れ替えるインスタンス数とか指定できる感じで、たしかにkubernetesの思想を転用してみたみたいな感じでした。（テンプレートのファミリーを指定しとくとその中で最新のやつが勝手にテンプレートとして使われるが設定は要gcloudコマンドな模様）
https://cloudplatform-jp.googleblog.com/2017/09/meet-Compute-Engines-new-managed-instance-group-updater.html
https://qiita.com/sinmetal/items/2c880e88924403e2b13c

なんかインスタンスグループ作ってオートスケール有効にすると作った瞬間に指定したテンプレートのVMが再小数で作られるっぽいです。
起動しているVMが増えてた。これ監視Stackdriver今の感じで追随してくれるか確認いりそう。

起動時の処理が必要な場合、cloud_init的なスタートスクリプトがある模様
https://cloud.google.com/compute/docs/startupscript
https://qiita.com/web_se/items/ed014a8ecf338db5c6f9

あと、マネージドインスタンスグループを削除すると中身のインスタンスも一緒に消えるので、必要なら外すかスナップショットとってから消すとよさそうです。
オートスケーリング縮退削除でログ消える問題についてはStackDriverに飛ばしとくとよさそうです。
https://qiita.com/munaita_/items/e59765d1861e690e6c4c
外部IPがエフェメラルになる（静的IPじゃない）のはオートスケーリングだと固定は難しそう。
運用中に更新する場合はテンプレート作り直す別インスタンス複製して作業することになるのかなと。
https://cloud.google.com/compute/docs/autoscaler/?hl=ja&_ga=2.109017284.-779814870.1500864087#autoscaling_options
https://cloud.google.com/compute/docs/instance-groups/apply-sizing-recommendations-managed-instance-groups?hl=JA