ALBのターゲットにNLBを登録してEC2まで通信する
今回のテーマ
こんにちは、「たこ焼き作りのプロ」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の構成になった際の参考になれば幸いです。