【GCE】インスタンスグループの自動スケーリング についての備忘録

# はじめに

インスタンスのグループの自動スケーリング についてまとめます

https://www.udemy.com/course/google-cloud-platform-gcp/

https://cloud.google.com/compute/docs/autoscaler?hl=ja

# 全体構成像
![スクリーンショット 2022-01-15 4.27.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/89c0c00e-40fd-e34c-a0c0-dd0af5a38913.png)

# 用語

## マネージド インスタンス グループ（MIG）

> - 複数の同一`VM`でのアプリケーション操作が可能
- 自動スケーリング、自動修復、リージョン（マルチゾーン）デプロイメント、自動更新などの自動化`MIG`サービスを活用することで、スケーラブルで可用性に優れたワークロード処理を実現できる

https://cloud.google.com/compute/docs/instance-groups?hl=ja

## `VM` 
仮想マシンのこと

## スケールイン

> 負荷が多くなると`MIG`に`VM`が追加されること

## スケールアウト
> スケールインした`VM`の必要性が低下した際に増やした`VM`を削除すること 

# やり方

# `GCE`のイメージの作成

## イメージ

> イメージとは、VM の起動に必要なアプリケーションとオペレーティング システムを含むディスクのレプリカです

https://cloud.google.com/compute/docs/images?authuser=1&_ga=2.142160626.-1557321698.1619416499&_gac=1.49062612.1642149041.CjwKCAiA24SPBhB0EiwAjBgkhgaXRmDvxEnvLvpJQ6RZ-rdbhSEQ8ZsVBj0cmg2a0igw45ZV8sjWbBoCH1cQAvD_BwE

![スクリーンショット 2022-01-15 5.20.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/4c38355e-ffef-72e0-3cb2-39d91b50bea4.png)

```bash
gcloud compute images create イメージ名 --project=プロジェクト名 --source-disk=ソースディスク名 --source-disk-zone=asia-northeast1-b --storage-location=asia-northeast1
```

# インスタンステンプレートの作成

## インスタンス テンプレート
> 仮想マシン（VM）インスタンスとマネージド インスタンス グループ（MIG）を作成するために使用できるリソース

https://cloud.google.com/compute/docs/instance-templates?hl=ja

## テンプレート名・マシン構成を設定

![スクリーンショット 2022-01-15 5.24.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/82f805a7-334b-c594-8a97-db2d45f0f400.png)

## 作成したイメージをブートディスクに設定する
![スクリーンショット 2022-01-15 5.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/562de125-77b3-5f74-dd57-62c5fbb0771f.png)


## アクセス スコープ > API ごとにアクセス権を設定
- ストレージ > フル
- ファイアウォールの`HTTPトラフィック(HTTP通信）`を許可する 
![スクリーンショット 2022-01-15 5.29.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/06777a02-8487-ce52-df0d-031b84e9e112.png)

# インスタンスグループの作成

## インスタンスグループ

> 単一のエンティティとして管理できる仮想マシン（VM）インスタンスの集まり

https://cloud.google.com/compute/docs/instance-groups/?_ga=2.142160626.-1557321698.1619416499&_gac=1.49062612.1642149041.CjwKCAiA24SPBhB0EiwAjBgkhgaXRmDvxEnvLvpJQ6RZ-rdbhSEQ8ZsVBj0cmg2a0igw45ZV8sjWbBoCH1cQAvD_BwE

## 前回作成したインスタンステンプレートを選択する

![スクリーンショット 2022-01-15 5.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/15e9463e-ee46-2188-d274-91e26b19c0ce.png)

## 自動スケーリングを設定する
![スクリーンショット 2022-01-15 5.39.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/268ead44-ff81-2c5b-61b9-615322a20be2.png)

## インスタンスの最小・最大数を設定する
![スクリーンショット 2022-01-15 5.40.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/5d92cab0-c966-ae7c-663d-7a0e55f8f26d.png)
 
## 設定したインスタンス数に応じてインスタンスが自動で作成される
![スクリーンショット 2022-01-15 5.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/e69abef8-171c-b180-f642-7f00d58392e0.png)

# CloudSQLに接続する

## プライベートIPアドレスを設定する
![スクリーンショット 2022-01-15 18.46.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/a7d9ee9c-41f4-fec7-8f77-a7be1411c50e.png)

## 設定したプライベートIPアドレスを設定する

```php:/var/www/html/index.php
<?php
try {
    $pdo = new PDO('mysql:host='プライベートIPアドレス名';dbname='DB名';charset=utf8','ユーザ名','パスワード',
      [(PDO::ATTR_EMULATE_PREPARES => false)];
      echo "成功";
    } catch (PDOException $e) {
    echo "失敗";
}
?>

<?php
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "<p>";
    echo $row["name"];
    echo "</p>";
}
?>
```

## イメージを作成

![スクリーンショット 2022-01-16 2.46.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/674c3a6b-0701-011c-d71a-8c8dad9471cf.png)

## インスタンステンプレートを作成

### 作成したイメージをブートディスクに設定
![スクリーンショット 2022-01-16 2.58.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/15a2424d-840b-b2e0-e477-8d2fcf5f586c.png)

### 起動スクリプトに`GCSバケット`をマウントする処理を追加する

```bash
#! /bin/bash
sudo gcsfuse -o allow_other マウント元のバケット名 マウント先
```

## インスタンスグループを更新

作成したインスタンステンプレートを設定する
![スクリーンショット 2022-01-16 3.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/55f9d1f3-07eb-5fed-edbd-226a3973bcfc.png)

インスタンスの再起動/置換を行う
![スクリーンショット 2022-01-16 3.03.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/9b3b0f03-e28f-2b37-b58f-efa5d204a232.png)

## マウントしたGCSの画像を表示する

```bash
ls  -ltr /var/www/html/demo/
total 224
-rw-r--r-- 1 root root  25424 Jan 10 15:01 b551ca84-3de9-2e40-5ceb-c2d7f90bb8f6.png
-rw-r--r-- 1 root root 202962 Jan 10 15:01 Corporate_Sunrise.png

vi /var/www/html/index.php 
```

```php:/var/www/index.php
<div>
 <img src="./demo/Corporate_Sunrise.png">
</div>
```

### 画像が表示できれば成功
![スクリーンショット 2022-01-16 3.17.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/4ce97ffb-dc21-63e2-bc02-01c06603b3db.png)


# さいごに
読んでいただきありがとうございます。
いいねしていただけると記事執筆の励みになりますので、参考になったと思った方は是非よろしくお願いします！