ALBのターゲットにNLBを登録してEC2まで通信する

2022.12.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回のテーマ

こんにちは、「たこ焼き作りのプロ」AWS事業本部コンサルティング部のこーへいです。

今回のテーマはALBのターゲットにNLBを登録してエンドのEC2まで通信する方法の紹介です。

背景

通常ALBを利用する場合はターゲットにインスタンスを登録することが多いです。

しかしALBのターゲットにIPアドレスを登録したいがターゲットのIPアドレスが固定出来ない場合に、NLBを挟むことで解決する手法があります。

現時点でALBのターゲットにNLBを登録する記事があまり転がっておらず、何点かハマった箇所もあったのでそれらの知見共有が目的です。

行うこと

  • 本構成のELBやEC2の重要な設定箇所の解説
  • ハマりどころの紹介

行わないこと

  • ELBやEC2などの詳細な構築手順の解説

実際に構築

構成図

ALBとEC2の間にNLBがあるだけの簡単な構成です。
今回EC2はNLBのとある設定の紹介のために、シングルAZのみ配置にしております。

EC2インスタンス作成

apacheを起動し、index.htmlを配置したEC2インスタンスを、構成図の通りプライベートサブネットに作成してください。 その他は特に変わった設定は無いため、詳細な解説は省略いたします。

NLB(ターゲット)作成

設定項目 設定値
Scheme internal
Private IPv4 address Enter IP from CDIR
NLBのIPアドレスを入力
Listener Protocol:TCP
Port:80
クロスゾーン負荷分散 オン

変わった設定項目は上記くらいだと思います。 NLBのIPアドレス指定方法は以下を参照してください。

赤枠で囲った箇所にIPアドレスを入力して下さい。

クロスゾーン負荷分散は、NLB作成後に設定画面を開き上記の赤枠の設定を変更して下さい。

ALB(ターゲット)作成

設定項目 設定値
ターゲットタイプ NLBのIPアドレス(2つ)

変わった設定項目はALBのターゲットグループのターゲットタイプにIPアドレスを選択するくらいです。

疎通確認

上記のALBのドメインからアクセスしてみると、以下のようにEC2に配置したindex.htmlが表示されました!(index.html流石に簡素すぎ?)

ハマりどころの紹介

セキュリティグループ

NLBはSGを付与することが出来ないため、EC2に付与したSGのインバウンドルールには注意が必要です。

具体的にはALBを配置しているサブネットからの通信を許可することでALB→NLB→EC2の通信が可能となります。

またNLBを配置しているサブネットからのインバウンドを許可せずとも通信自体は可能ですが、NLB→EC2のヘルスチェックが失敗してしまうので必要な場合はNLBのサブネットからの通信も許可しましょう。

クロスゾーン負荷分散

NLB作成後にクロスゾーン負荷分散の設定をオンにしましたが、こちらはオフの状態だと以下のようにALBから見た片方のNLBだけヘルスチェックが失敗してしまいます(画像はALBのターゲットグループでNLB用IPアドレスのヘルスチェックが片方失敗している様子)。

簡単に説明するとクロスゾーン負荷分散がオフの状態では、AZが1cに配置しているNLBからは1cに配置しているEC2にしか通信が出来ず、1dに配置しているNLBは1cに配置しているEC2と通信が出来無いためです

1cと1d両方のNLBから1cに配置しているEC2に通信を送るためにはクロスゾーン負荷分散をオンにする必要があります。

詳細は以下記事にて詳しいです。

まとめ

ありそうでなかなか無いマニアックな構成ですが、もしALB→NLB→EC2の構成になった際の参考になれば幸いです。