ネットワーク作成からスケーラブルな仮想サーバー構築までをクラウドで行う【GC編】

# はじめに

[こちら](https://qiita.com/selfsryo/private/814a4a06345a87da31f3)でAWSでスケーラブルな仮想サーバー構築を行うという記事を書いたのですが、そのGC編です。ちなみにこの記事では、GCとはGoogle Cloud（2020年10月にGCP→GCに名称が変わった）のことを指しています。この記事の表記ではGCで統一してみようと思います。

# 対象

[AWSの記事](https://qiita.com/selfsryo/private/814a4a06345a87da31f3#%E5%AF%BE%E8%B1%A1)と同じです。



# 前提

[AWSの記事](https://qiita.com/selfsryo/private/814a4a06345a87da31f3#%E5%89%8D%E6%8F%90)と同じです。GCでもコンソールの操作メインで書いてみます。



# 構成図

[AWSの記事](https://qiita.com/selfsryo/private/814a4a06345a87da31f3#%E6%A7%8B%E6%88%90%E5%9B%B3)と同じような感じになりますが、GCの場合、インスタンスをInstance Groupとしてまとめることで、ロードバランサの負荷分散とオートスケーリングの設定の両方ができます。


![gcp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/4ed34194-bf6b-0dcc-f250-a3cb095b2df2.png)






# 方法

キャプチャやサービスの名称は2021年9月現在の情報です。



## ネットワーク構築

VPC/サブネット切り分け、およびファイアウォールの設定を行います。

### VPC

GCにログイン後、左メニュー「VPC ネットワーク」> 「VPC ネットワーク」を選択し、ページ上部の「VPC ネットワークを作成」をクリックします。今回名称と説明を以下のように指定しました。

| 名前                  | 説明                |
| --------------------- | ------------------- |
| auto-scaling-test-vpc | for AutoScalingTest |

「サブネット作成モード」では「カスタム」を選択し、1つのサブネットを作成します。以下のような値にしました。

| 名前                             | リージョン      | IPアドレス範囲 |
| -------------------------------- | --------------- | -------------- |
| auto-scaling-test-public-subnet1 | asia-northeast1 | 10.0.1.0/24    |

作成後は一覧にこのように表示されています。
![スクリーンショット 2021-09-27 19.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/f663ace5-6cb1-0eb5-46da-1ffd1fb3cb7c.png)



## インスタンス

仮想サーバーのインスタンスを作成していきます。



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

左メニュー「Compute Engine」> 「インスタンスグループ」に進み、「インスタンスグループを作成」をクリックします。作成画面に遷移するので、「新しいマネージドインスタンスグループ」を選び、項目を入力します。前半部分は以下のようにしました。

| 名前                  | ロケーション | リージョン      |
| --------------------- | ------------ | --------------- |
| auto-scaling-test-mig | 複数のゾーン | asia-northeast1 |


その後、「ポート名のマッピングを指定する」をクリックし、以下の値を設定します。


| ポート名 | ポート番号 |
| -------- | ---------- |
| http     | 80         |


「インスタンステンプレート」では「新しいインスタンステンプレートを作成」をクリックし、テンプレート作成画面に遷移します。今回は以下のように項目を入力しました。OSはデフォルト（Debian）のままにしています。

| 名前                       | マシンタイプ |
| -------------------------- | ------------ |
| auto-scaling-test-template | e2-micro     |



その後、「管理、セキュリティ、ディスク、ネットワーキング、単一テナンシー」をクリックし、「管理」タブを開いて 「自動化」の「起動スクリプト」に以下を入力します。インスタンス起動時に、自動でApacheを起動する設定です。

```
#!/bin/bash
apt update
apt install -y apache2
chown -R $USER:$USER /var/www
echo Hello,AutoScalingTest > /var/www/html/index.html
```

その後「ネットワーキングタブ」で以下を設定します。

| ネットワーク                         | ネットワークタグ      |
| ------------------------------------ | --------------------- |
| 作成したVPC（auto-scaling-test-vpc） | auto-scaling-test-tag |

「保存して次へ」をクリックし、最後にスケーリングの設定をします。以下の数値を入力します。

| インスタンスの最小数 | インスタンスの最大数 |
| -------------------- | -------------------- |
| 2                    | 4                    |

ここまで進んだら、「作成」をクリックします。

インスタンスグループに遷移するので、その中に「auto-scaling-test-mig」が表示されていることを確認します。少し待ったら、ステータスにチェックが入ります。

![スクリーンショット 2021-09-27 19.41.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/bb1f31eb-1bd5-b021-3ed4-0b990d45b884.png)


### ファイアウォール

ヘルスチェック用のファイアウォールを作成します。「VPCネットワーク」 >  「ファイアウォール」 > 画面上部「ファイアウォール ルールを作成」をクリックし、項目を入力します。今回は以下のように設定しました。

| 名前                                 | ネットワーク                         | ターゲット               | ターゲットタグ        | ソースフィルタソースIPの範囲 | ソースIPの範囲プロトコルとポート | プロトコルとポート                                           |
| ------------------------------------ | ------------------------------------ | ------------------------ | --------------------- | ---------------------------- | -------------------------------- | ------------------------------------------------------------ |
| auto-scaling-test-allow-health-check | 作成したVPC（auto-scaling-test-vpc） | 指定されたターゲットタグ | auto-scaling-test-tag | IP範囲                       | 130.211.0.0/22,  35.191.0.0/16   | 指定したプロトコルとポートにチェック<br>「tcp:」にチェック<br>ポート入力欄に「80」 |

入力後、「作成」をクリックします。以下のようにファイアウォールが作成されます。
![スクリーンショット 2021-09-27 19.49.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/f9a605a1-5fce-009a-2fef-883120ee3f10.png)



### オートスケーリングの確認

左メニュー「Compute Engine」> 「VMインスタンス」をクリックし、インスタンス一覧に遷移してみると、インスタンスが2台作成されます。オートスケーリングが効いているか確認するため、このうち1台を手動で削除してみます。1台にチェックを入れ、画面上部の三点リーダーから「削除」をクリックします。

![スクリーンショット 2021-09-27 22.35.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/aa4c60dd-9940-1a9c-a0cd-1f92ace83286.png)

確認画面が表示されるのでここでも「削除」をクリックします。削除が終わったあとにしばらく待ってみて、新しくインスタンスが作成されることが確認できたらOKです。（作成されているかどうかを確認するには、画面の更新をする必要があります。あと結構時間がかかります）



## ロードバランサ 

ロードバランサ設定を進めます。

### 外部IP予約

「VPCネットワーク」 >  「外部IPアドレス」 > 画面上部「静的アドレスを予約」をクリックし、予約を行います。今回は以下のようにしました。以下以外はデフォルトです。

| 名前                 | タイプ     |
| -------------------- | ---------- |
| auto-scaling-test-ip | グローバル |

入力後、「予約」をクリックします。



### ロードバランサ 

左メニュー「ネットワークサービス」 > 「Cloud Load Balancing」 > 「ロードバランサを作成」 > 「HTTP(S) 負荷分散」の「構成を開始」をクリックして次ページへ遷移します。
「インターネットから自分のVMへ」を選択し、「続行」をクリックします。

そこで、ロードバランサの名前を設定できます。今回は`auto-scaling-test-lb`という名前にしました。
その後、「バックエンドの構成」をクリックし、こちらにも名前を設定します。今回は`auto-scaling-test-lb-backend`としました。その後「バックエンド」 > 「新しいバックエンド」で値を入力します。

| インスタンスグループ                                  | ポート番号 |
| ----------------------------------------------------- | ---------- |
| 作成したインスタンスグループ（auto-scaling-test-mig） | 80         |



ヘルスチェックに関しては、「ヘルスチェックを作成」をクリックし、値を入力します。以下入力した値です。

| 名前                           | プロトコル | ログ |
| ------------------------------ | ---------- | ---- |
| auto-scaling-test-health-check | HTTP       | オン |

ここまで入力したら「保存」をクリックし、最後に「作成」をクリックします。

次に「フロントエンドの構成」をクリックします。ここでは以下の項目を設定します。

| プロトコル | IPアドレス                                 | IPバージョン | ポート |
| ---------- | ------------------------------------------ | ------------ | ------ |
| HTTP       | 予約したIPアドレス（auto-scaling-test-ip） | IPv4         | 80     |

「完了」を押下し、「作成」をクリックします。



ここまで設定すると、ロードバランサ&オートスケーリングの組み合わせが作成されています。作成したロードバランサをクリックして「IP:ポート」を確認し、ブラウザからアクセスすると以下のようなページに遷移します。

![スクリーンショット 2021-09-20 21.30.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/1855bb19-3ba1-5456-a7ed-6bdf3892090a.png)



### 負荷分散の確認

負荷分散が正しく行われているか確認します。
とりあえずファイアウォールを追加します。「VPCネットワーク」 >  「ファイアウォール」 > 画面上部「ファイアウォール ルールを作成」をクリックし、以下のように設定します。

| 名前                        | ネットワーク                         | ターゲット               | ターゲットタグ        | ソースフィルタソースIPの範囲 | ソースIPの範囲 | プロトコルとポート                                           |
| --------------------------- | ------------------------------------ | ------------------------ | --------------------- | ---------------------------- | -------------- | ------------------------------------------------------------ |
| auto-scaling-test-allow-ssh | 作成したVPC（auto-scaling-test-vpc） | 指定されたターゲットタグ | auto-scaling-test-tag | IP範囲                       | 0.0.0.0/0      | 指定したプロトコルとポートにチェック<br>「tcp:」にチェック<br>ポート入力欄に「22」 |

入力後、「作成」をクリックします。以下のようにファイアウォールが作成されます。

![スクリーンショット 2021-09-27 21.37.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1310757/3e601ee8-d544-0e13-acc4-204e5a3d1540.png)

これで、インスタンスにSSH接続ができるようになりました。
左メニュー「Compute Engine」> 「VMインスタンス」をクリックし、インスタンス一覧に遷移します。今回作成したインスタンスは一覧の中に2つあるはずなので、この2つのインスタンスの「接続」 > 「ブラウザウィンドウで開く」をクリックし、SSH接続のコンソールブラウザを展開します。両方展開すると2ブラウザ同時に開くことができます。

その後、両方のコンソールブラウザで以下のコマンドでApacheのログを確認してみます。

```
cat /var/log/apache2/access.log
```

すると、`GoogleHC/1.0`からのアクセスがたくさんあることがわかります。これはHealthCheckからのアクセスです。ここで、ブラウザからロードバランサの「IP:ポート」に10回ほどアクセスし、再度上のコマンドを叩いてみます。すると、両方のコンソールブラウザでHealthCheck以外からのアクセスが確認でき、その数を合計するとアクセスした回数になっているはずです。
このようにして、アクセスが分散されていることを確認できます。







# おわりに

AWSと比較するとオートスケーリングとロードバランサの対象のグループが同じな分、シンプルに設定することができた印象です。ですがヘルスチェック用のファイアウォールを設定したりと、AWSと異なる部分があったため少し手間取りました。

たくさんGCも触って、操作感を覚えていきたいです。

（今回はあえてコンソールでの操作のみに拘りましたが、[Cloud Shell](https://cloud.google.com/shell?hl=ja)とかを使った方が楽できるだろうなあ・・・とも感じました。）