[検証結果]ALB のターゲットグループにALBは登録できない
概要
- あまり知られていませんが、ALB をターゲットグループに登録することが出来ます。こちらのドキュメントに記載があります。主に、ALB に静的 IPアドレス(IPアドレスの固定化)を使用する目的となります。
1 つの Application Load Balancer を含むターゲットグループをターゲットとして作成し、そのグループにトラフィックを転送するように Network Load Balancer を設定できます。このシナリオでは、トラフィックがターゲットに到達するとすぐに、Application Load Balancer がロードバランシングの決定を引き継ぎます。この設定では、両方のロードバランサーの機能が組み合わされて以下のような利点が生まれます。
- Application Load Balancer のレイヤー 7 リクエストベースのルーティング機能をエンドポイントサービス (AWS PrivateLink) や静的 IP アドレスなど、Network Load Balancer がサポートする機能と組み合わせて使用できます。
- この構成は、シグナリングに HTTP を使用するメディアサービスや、コンテンツをストリーミングするための RTP など、マルチプロトコルに 1 つのエンドポイントを必要とするアプリケーションに使用できます。
この機能は、内部またはインターネット向けの Network Load Balancer のターゲットとしての内部またはインターネット向けの Application Load Balancer とともに使用できます。
- しかし、上記ドキュメントおよびその他のドキュメントから、ALB – ALB のシステム構成は NG と読み取れませんでした。
- そのため、本当にALB のターゲットグループにALBは登録できないのか? を検証してみます!
- 今回検証する構成は、以下となります。
準備1 (まずはALBのターゲットグループを作る)
- ALB – ALB のシステム構成を検証するため、まずPrivate Subnet にALBを作成しておきます。(ALB はリスナールールを設定し、固定レスポンス 200を返却します)
- 続けて、ターゲットグループを作成します。ターゲットタイプには、Application Load Balancer を選択します。
- ターゲットに、先程Private Subnet に作成しておいたALB を登録します。
- ALB のターゲットグループが作成出来ました。(ここまでは問題なし)
検証パターン1 (NLB-ALBの構成を作る)
- 最初は、ドキュメント通り、NLB – ALB のシステム構成を作成します。
- NLB を作成する際に、ターゲットグループの選択で、先程作成した ALB のターゲットグループが選択出来ました。
検証パターン2 (ALB-ALBの構成を作る)
- 次は、本題の ALB – ALB のシステム構成を作成します。
- ALB を作成する際、ターゲットグループの選択で、先程作成した ALB のターゲットグループは選択出来ませんでした。
検証パターン3 (つぎにALBのターゲットグループをIPのターゲットタイプで作る)
- これだけでは検証は終わりません! パターン2 は、ターゲットグループ作成時にターゲットタイプに、Application Load Balancer を選択していました。パターン3 では、ターゲットタイプに、"IP アドレス"を選択して試します。
- (プライベートサブネットに配置した)ALB のIPアドレスを調べます。調査方法はこちらの記事を参照。
- ターゲットグループにターゲットを登録する際、ターゲットの種類は、インスタンス ID、IP アドレス、Lambda 関数のいずれかを登録できます。
- ターゲットタイプに、"IP アドレス"を選択します。
- 先程調べたALB のIPアドレスを指定します。
- 「ターゲットグループの作成」を押すと、以下のエラーが表示されました…。
- 具体的なエラーは、以下の通りです。これは、指定したIPアドレスは、既に同一VPC 内のLoad Balancer で使われているとチェックされた様です。
- The IP addresses '172.31.111.163,172.31.83.76’ cannot be used as targets, as they are in use by a load balancer
- ドキュメントには、以下の記載があります。"同じ VPC に別の Application Load Balancer の IP アドレスを登録することはできません。" とあり、製品仕様上、同一VPC 内のLoad Balancer をIP アドレスで登録する操作は、NG の様です。
同じ VPC に別の Application Load Balancer の IP アドレスを登録することはできません。もう一方の Application Load Balancer が、ロードバランサー VPC にピアリング接続されている VPC に含まれている場合は、その IP アドレスを登録できます。
検証パターン4 (ALBのターゲットグループをVPC Peering先のALB IP指定で作る)
- パターン3 の延長戦です。
- ドキュメントには、以下の記載があります。VPC Peering先のALB IP アドレスなら登録できるように読み取れます。本当か!? それでは、引き続き、検証してみますね。
もう一方の Application Load Balancer が、ロードバランサー VPC にピアリング接続されている VPC に含まれている場合は、その IP アドレスを登録できます。
(If the other Application Load Balancer is in a VPC that is peered to the load balancer VPC, you can register its IP addresses.)
- VPC Peering先のALB IP アドレスを指定して、ターゲットグループを作成します。
- ターゲットタイプに、"IP アドレス"を選択します。
- 普通にPeering 先 ALB のIPアドレスを入力すると、怒られます。
- ネットワークの選択を、すべてに選び直します。改めて、Peering 先 ALB のIPアドレスを入力します。
- この方法であれば、VPC Peering先のALB IP アドレスを指定したターゲットグループは作成出来ました。
- 続いて、Peering された VPC において、ALB を作成します。ここで、先程作成した(VPC Peering先のALB IP アドレスを指定した)ターゲットグループを選択します。
- このパターンだと、ロードバランサーは作成出来ました!
- だけど、ヘルスチェック失敗してしまいます。ヘルスステータスは unhealthy となり、"Request timed out" のエラーになっています。どうやら、ALBからVPC Peering先のALB へRequest が届かない様子。
- 念のため、クライアントからcurl を打ちましたが、ステータス 504 のGateway Time-out エラーになります。
niikawa@niikawa1:~$ curl -vv http://niikawa-test-alb-front-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com
* Rebuilt URL to: http://niikawa-test-alb-front-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com/
* Trying 50.100.100.100...
* TCP_NODELAY set
* Connected to niikawa-test-alb-front-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com (50.100.100.100) port 80 (#0)
> GET / HTTP/1.1
> Host: niikawa-test-alb-front-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 504 Gateway Time-out
< Server: awselb/2.0
< Date: Thu, 12 Oct 2023 11:32:07 GMT
< Content-Type: text/html
< Content-Length: 132
< Connection: keep-alive
<
<html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
</body>
</html>
* Connection #0 to host niikawa-test-alb-front-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com left intact
niikawa@niikawa1:~$
結論です
- パターン1~4 の結論をまとめると、以下となります。システム構成に、役立ててください。
- NLB のターゲットグループにALB は登録出来る。(ターゲットタイプに、"Application Load Balancer"を指定)
- ALB のターゲットグループにALB は登録出来ない。(ターゲットタイプに、"Application Load Balancer"を指定)
- ALB のターゲットグループに同一VPC の ALB に割り当てられたIP アドレスは登録出来ない。(ターゲットタイプに、"IP アドレス"を指定)
- ALB のターゲットグループにPeering先VPC のALB に割り当てられたIP アドレスは登録出来る。(ターゲットタイプに、"IP アドレス"を指定) ALBにターゲットグループを登録まで出来るが、ターゲットに登録されたALB へRequest は転送されない。