はまったので書いておく。
とりあえず、AWSのELB + EC2構成をGCPにつくりたいんだけどって人向け。
GCPの負荷分散(ロードバランサー)って?
https://cloud.google.com/compute/docs/load-balancing-and-autoscaling
やりたかったこと
これ↓
|GCEインスタンス|
/
|LB|
\
|GCEインスタンス|
-
GCEインスタンス2台
- ともにapiがport3000でListen
- ともにfrontがport4000でListen
-
やりたいLBの設定
- front.example.jp:80 -> LB -> 3000でGCEにリクエスト
- api.example.jp:80 -> LB -> 4000でGCEにリクエスト
-
Http負荷分散 + 非マネージドインスタンスグループで実現した
- マネージドインスタンスグループでの負荷分散に関しては書きませんごめんなさい
- マネージドインスタンスグループがgoogle推奨みたいです
- https://cloud.google.com/compute/docs/instance-groups/
やったこと
1. インスタンス作成 x2
- Compute Engine -> VMインスタンス -> インスタンスを作成
- firewallのHTTP(s)を許可するをチェック
- zoneもasia-north-eastあたりにしとく
- あとはお好きなように埋める
2. インスタンスグループ作成
- Compute Engine -> インスタンスグループ -> インスタンスグループを作成
- ロケーションはシングルゾーンにチェック
- "ポート名のマッピングを指定する"リンクをクリックし、以下を登録
- api: 3000
- front: 4000
- 作成方法は"既存のインスタンスを選択"をチェック
- VMインスタンスの選択欄で、作成した2つのインスタンスを指定
3. 負荷分散の設定
a. 負荷分散の作成
- ネットワーキング -> 負荷分散 -> ロードバランサの作成 -> HTTPS負荷分散の"設定を開始"をクリック
- 適当に名前を入れる
b. バックエンドサービスの作成(api用とfront用の2つ)
-
バックエンドの設定 -> バックエンドサービスを作成または選択 -> バックエンドサービスを作成
- 名前を適当に
- インスタンスグループに先ほど作成したグループを選択
- ポップアップで"インスタンスグループは名前付きポートを所有済み"がでるのでapi(ポート:3000)を選択する
- ("ポート番号"の欄に3000と記入するでもいい)
- あとはお好きに設定
-
同様にバックエンドサービスを作成または選択 -> バックエンドサービスを作成 からfront用のバックエンドサービスを作る
- ポップアップで"インスタンスグループは名前付きポートを所有済み"がでるのでfront(ポート:4000)を選択する
- ("ポート番号"の欄に4000と記入するでもいい)
- ポップアップで"インスタンスグループは名前付きポートを所有済み"がでるのでfront(ポート:4000)を選択する
c. ホストとパスのルールの作成
- ホストとパスのルールで以下を設定
-
ホスト: front.example.jp
,パス: /*
,バックエンド: front用のバックエンドサービス
-
ホスト: api.example.jp
,パス: /*
,バックエンド: api用のバックエンドサービス
-
d. フロントエンドの設定
- フロントエンドのIPとポートを追加で以下を設定
- プロトコル: HTTP, IP: エフェメラル, ポート: 80
注意
- 同一のインスタンスは複数のLBに設定できない
- 同一のインスタンスは複数のバックエンドサービスに設定してLBに紐付けできない
- TCP負荷分散ではportフォワーディングできない