GCPにDjangoの環境を整えていく03(GCLB)

こんにちは
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
前回GCEとCloud SQLを使って構築したDjango環境にGCLB(Google Cloud Load Balancing)を導入し、VMでの負荷分散環境を作りたいと思います。

今までの記事は以下となります。

https://qiita.com/ohtsuka-shota/items/4fa7cd52421ee5887295

https://qiita.com/ohtsuka-shota/items/2a144832e5fc5a8f1ed9

# 環境イメージ
ざっくりこんな感じのイメージになると思います。正直自信はありません。
GCLBで使うプロキシのSubnetをVPC上に作らないといけなかったり、ヘルスチェック用の定義を作成しないといけなかったりとAWSと比べると色々手間だなぁと感じました。（もしかしたらAWSもそのあたりの設定項目が実はあり、私が気が付いていだけなのかもしれませんが…）
![GCP01-ページ5.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a062d384-78bf-26d3-a584-9a2f86c2ed6a.png)

# 構築 
## VMをもう1台立ち上げる
### Subnetをもう1つ作る
VPCの管理画面を開きます。サブネットタブを押下し、サブネットを追加を押下します。
![Pasted image 20240502131903.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/94306dae-c0ab-09b4-653e-6c1dc5fcf87c.png)
今回は以下の設定を入れました。他はデフォルトの設定になります。
- 名前：classact-public-subnet02
- リージョン：asia-northeast1（東京）
- IPv4範囲：192.168.2.0/24
 
![Pasted image 20240502132554.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/dc957e48-3dc5-d04a-20b9-3bd4b55d7026.png)
作成出来たことを確認します。
![Pasted image 20240502132817.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/396f8b0e-d323-00af-ed05-d27b8162330c.png)

#### 独り言
Clouud SQLとの連携に必要なVPCネットワークピアリングやプライベートサービスアクセスはVPC単位で設定されているからSubnetに追加に伴う追加設定は思ったよりも少なそう。。。
私の環境の場合FWのルールがSubnetに割り当てているIPアドレスレンジ単位になるので、そこには手を入れないといけませんでしたが。
![Pasted image 20240502155338.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a85c9d5a-52d4-0d67-5368-b7c3e553ab31.png)

### VMを作成するためのマシンイメージを作成する。
GCE管理画面に移動してマシンイメージの元となるVM（今回はclassact-vm-django）を選択します。
右の3ポチ（名前がわからない）をクリックして新しいマシンイメージの作成を押下します。
![Pasted image 20240502130656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2273ac00-e8bc-b7af-a931-03ef19638607.png)
以下の設定で作成します
- 名前：classact-django-image
- ソースVM：classact-vm-django(自動で選択されてます)
- ロケーション：マルチリージョン：asia

![Pasted image 20240502131155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/16d27911-cd65-215b-19bc-0629b67383bf.png)
作成後暫く待機するとステータスに緑のチェックがつき、利用可能となります。
![Pasted image 20240502131731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/edbc12f9-536b-aada-454c-a752985d845b.png)

### VMを立ち上げる
作成したpublic-subnet02にマシンイメージを使ってVMをデプロイしていきます。
作成したマシンイメージからインスタンス作成を押下します。
![Pasted image 20240502152248.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8b7286e4-4805-d68e-bb86-b272c647f6ad.png)
以下の設定で立ち上げました。長くなり恐縮です。
- 名前：classact-vm-django-other
- リージョン：asia-northeast1（東京）
- ゾーン：asia-northeast1-b（前立ち上げたVMが1-aなので別な場所にデプロイします）
- マシン構成：E2
- マシンタイプ：e2-micro
- ファイアウォール：ロードバランサ、HTTP
- ネットワーク：classact-vpc
- サブネットワーク：classact-public-subnet02 

![screencapture-console-cloud-google-compute-instancesAdd-2024-05-02-15_27_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/91a852dc-e811-ad89-ec24-c9cbce098943.png)
立ち上がったことを確認します。
![Pasted image 20240502153538.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7e717794-2b8f-24d1-ed6f-726f0676e77f.png)

## GCLBを作成し、VMと紐づける
### インスタンスグループを作成する
GCLBにはバックエンドサービスというものを紐づけていくのですが、そのバックエンドサービスを作成するためにインスタンスグループというものを用意する必要があります。これを用意します。
![Pasted image 20240502202905.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ed3c1a68-8fd1-89fa-e616-64fcebd94247.png)

インスタンスグループは各リージョン・ゾーンごとに1つずつ作らないといけない様子でした。
今回は東京リージョンの1-a,1-bそれぞれにDjango VMがあるため2つ作ります。
まず1つ目の設定は以下としました。VPCやSubnet、紐づけるVMを選択して作成します。
![Pasted image 20240502204253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d45a4ca9-3cba-53f7-b4e1-cb0cfd89e770.png)
次に2つ目です。
![Pasted image 20240502204820.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7e0ee39c-739d-f950-f3d2-9d4cd69a2355.png)
正常に作成されていることを確認します。
![Pasted image 20240502205053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a2fa4384-ef6a-2e53-ec31-784c437461bb.png)

### バックエンドサービスとヘルスチェックの作成
次にインスタンスグループをまとめるバックエンドサービスを作成します。
バックエンドサービスを作成を押下します。
![Pasted image 20240502202542.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/9545dc2a-46e9-17aa-a0ea-2f58aba4a2e9.png)
今回GCLBで紐づけたいVMは東京リージョンにしかない為、Regionalを選択します。![Pasted image 20240502202557.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bc26649e-d019-e27f-812d-130f00c1850a.png)
バックエンドサービスを作成したいのですが、途中にヘルスチェックを作成する項目があるので、まずこれを埋めます。
![Pasted image 20240502205556.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/51f99e52-beed-0047-8a15-273bdf023c5a.png)
以下の設定で作成していきます。基本デフォルトで問題ありませんでした。
- 名前：classact-django-backend-healthcheck
- プロトコル：HTTP

![Pasted image 20240502205656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6bc2b0d7-df6f-bcfa-11a9-5085ed271d92.png)
ヘルスチェック作成後、バックエンドサービスの作成に戻ります。
以下の設定で作成しました。
- 名前：classact-django-backend-service
- リージョン：asia-northeast1
- ロードバランサの種類：リージョン外部アプリケーションロードバランサ
- バックエンドタイプ：インスタンスグループ
- プロトコル：HTTP
- ネットワーク：classact-vpc
- バックエンド1：インスタンスグループ：classact-instance-group-public-subnet01
- バックエンド2：インスタンスグループ：classact-instamce-group-public-subnet02

![screencapture-console-cloud-google-net-services-loadbalancing-backends-regionalBackendService-add-2024-05-02-20_58_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ad198bc2-8634-e320-be25-beb39c4fd7e9.png)
作成出来たことを確認します。
![Pasted image 20240502210121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a236cbdb-1059-e3d3-61dc-fade4f5df5f9.png)

### GCLBをデプロイする
ロードバランサをデプロイします。ロードバランサを作成を押下します。
![Pasted image 20240502201356.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/caf2bb96-16b0-312e-a7f7-941ba699175a.png)
ALBを使いたいのでアプリケーションの方を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/514a6706-5c40-f10f-0a09-01b48dd823c1.png)
インターネットにコンテンツ提供するLBなので、インターネット接続を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/aaf31792-490e-b055-1b4f-08cf793c8f0a.png)
DjangoのVMは東京リージョンにしかない為、リージョンワークロードの方を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2c95b43b-b10a-9ca4-f9b1-33ef16c7437e.png)
構成を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/48eb1d3a-4ede-089e-49ba-531db41a54e3.png)
プロキシ用のサブネットの作成が必要そうですね。サブネットを予約を押下します。
![Pasted image 20240502201808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bdc0657b-0f1a-f270-98ce-e85458e8024a.png)
以下の設定でProxy用のサブネットを作成します。
- classact-alb-subnet
- IPアドレス範囲：192.168.100.0/24

![Pasted image 20240502201940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4697ba1f-3a01-23c4-9523-33a31d73b776.png)
改めて以下の内容でGCLBのフロントエンドの構成を作成します。
入力出来たらバックエンドの構成を押下します。
- ロードバランサの名前：classact-django-alb
- リージョン：asia-northeast1（東京）
- ネットワーク：classact-vpc
- フロントエンドIPの名前：classactfrontendip
- プロトコル：HTTP

![Pasted image 20240502202106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d046333f-6f26-45f7-7a99-457dbb6d0b33.png)

画面右にバックエンドを入れる項目がありますので、作成したバックエンドサービスを選択します。今回はclassact-django-backend-serviceとなります。入力後作成を押下します。
![Pasted image 20240502210332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/dafb0b08-cbf0-c949-ccf2-0165e31cca7c.png)
作成されたことを確認します。
![Pasted image 20240502210512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/645b67ca-93da-357e-d936-82464e4f8ad4.png)
作成したGCLBのIPアドレスを確認します。
![Pasted image 20240502210948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/928b53ed-62ed-f474-1542-37de4b325bca.png)

## テスト
GCLBのIPアドレスを任意のWebブラウザで叩いてDjangoのデフォルトの画面が出てくれば環境構築は成功です。
お疲れ様でした。
![Pasted image 20240502211033.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6415f908-851f-3b74-b3f8-0db9ece002fd.png)