【AWS】NLB+ALB+EC2構成のユースケースと設計時のポイントについて解説します

はじめに


こんにちは、ネクストモードの眞鍋です。

AWSでWebアプリケーションを構築する際、ロードバランサーの選定は重要な設計要素の一つです。特に、固定IPアドレスが必要な場合や、高度なルーティング機能を実現したい場合には、NLB(Network Load Balancer)とALB(Application Load Balancer)を組み合わせた構成が選択肢の一つとなります。

本記事では、NLB+ALB+EC2という構成について、各サービスの特徴から設計時に考慮すべきポイントについて解説します。

各サービスの概要


NLBとは

NLB(Network Load Balancer)は、AWS が提供するレイヤー4(L4)のロードバランサーです。TCP/UDP/TLS トラフィックを処理し、超低レイテンシで高いスループットを実現します。

【主な特徴】

  • 固定IPアドレスを持つ
  • クライアントの送信元IPアドレスを保持
  • TLSターミネーションに対応

ALBとは

ALB(Application Load Balancer)は、レイヤー7(L7)のロードバランサーで、HTTP/HTTPS トラフィックの高度なルーティングが可能です。

【主な特徴】

  • パスベース、ホストベースのルーティング
  • ヘッダー、クエリパラメータによる条件分岐
  • AWS WAFとの統合が可能

EC2とは

EC2(Elastic Compute Cloud)は、AWS のクラウド上で仮想サーバーを提供するサービスです

様々なOSやスペックを用途に応じて選択でき、スケーラブルなコンピューティング環境を構築できます。

NLB+ALB+EC2構成のユースケース


1. 固定IPアドレスが必要なケース

ALBのIPアドレスは動的に変更されるため、固定IPが必要な場合は、ALBの前段に固定IPを持つNLBを配置することでIPアドレスを固定できます。

なお、固定IPを持つAWS Global AcceleratorをALBの前段に配置することも選択肢の一つです。

2. 高度なルーティング機能が必要なケース

ALBの柔軟なルーティング機能(パスベースルーティングやヘッダー情報による振り分けなど)を活用しつつ、NLBの固定IP機能も利用できます。

3. WAF統合と固定IPの両立

ALBにAWS WAFを統合してセキュリティを強化しながら、NLBで固定IPによるアクセス制御も同時に実現できます。

NLB+ALB+EC2構成構築時の考慮事項


1. TLS終端箇所

NLBとALBはどちらもTLS終端が可能なサービスです。

ただし、NLBのターゲットにALBを指定する場合、NLBではTLS終端できないという制限があります。
そのため、この構成ではALBでTLS終端を行うのが基本です。
この場合、NLBは通信内容を解析せず、受信したトラフィックをそのままALBに転送するパススルー動作となります。

aws-nlb-alb-ec2-architecture_1

2. ヘルスチェック設定

NLBとALBは、どちらもターゲットグループの設定としてターゲットのヘルスチェック機能を持ちます。

ALBのヘルスチェック設定では、ターゲットのEC2上で動作するWebアプリケーションが、期待通りのステータスコードを返すプロトコルとパスを用意する必要があります。

    • EC2:Webアプリケーションが「/」への応答に対し、「200」を返す
    • ALBのヘルスチェック設定:プロトコル「HTTP」、パス「/」に対してヘルスチェックを行い、ステータスコード「200」が返ってきたら成功

一方、NLBのヘルスチェックは、ALBに対して行われます。成功条件は以下の通りです。

  1. ALBがヘルスチェックのプロトコル・ポート用のリスナーを持っていること
  2. ALBの先のターゲットが指定したパスに任意のステータスコードで応答できること
例外として、ALBが直接レスポンスを返す場合(リダイレクトや固定レスポンスなど)は、ALBが直接返すステータスコードで判定します。

この条件を満たさない場合、ヘルスチェックは失敗するため注意が必要です。

aws-nlb-alb-ec2-architecture_2

3. バックエンド(EC2)側でのアクセス元IPの取得


NLB+ALBを前段に設置する場合、EC2上のアプリケーションで実際のクライアントIPアドレスを取得するには、以下の仕様に注意が必要です。

IPアドレスの伝播の流れ

  1. NLBの動作
    • NLBはクライアントの送信元IPアドレスをそのまま保持してALBに転送します
    • ALBから見ると、NLBを経由してもクライアントの実IPアドレスが見えます
  2. ALBの動作
    • ALBはHTTP/HTTPSリクエストを一度終端します
    • その際、実際のクライアントIPアドレスをX-Forwarded-Forヘッダーに格納してバックエンドに転送します
    • EC2から見ると、送信元IPアドレスはALBのプライベートIPアドレスになります

EC2側での取得方法

  • アプリケーションログやアクセス制御でクライアントIPを使用する場合は、X-Forwarded-Forヘッダーから取得する必要があります
  • Webサーバー(Apache、Nginx等)の設定で、ログフォーマットにX-Forwarded-Forヘッダーを含めるよう設定します
  • アプリケーションコード内でも、直接送信元IPを参照するのではなく、X-Forwarded-Forヘッダーを優先的に参照するよう実装します

さいごに


NLB+ALB+EC2構成は、固定IPアドレスと高度なルーティング機能を両立したい場合に非常に有効なアーキテクチャです。
一方で、構成が複雑になるため、運用面でのコスト増加には注意が必要です。

要件に応じて、単一のロードバランサー構成との比較検討を行い、最適なアーキテクチャを選択することが重要です。