[検証結果]ALB のターゲットグループにALBは登録できない

11月 27, 2023AWS,ELB,システム設計

概要

  • あまり知られていませんが、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 を打ちましたが、ステータス 504Gateway 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 は転送されない。

 

関連資料