こんにちは、ネクストモードの眞鍋です。
AWSでWebアプリケーションを構築する際、ロードバランサーの選定は重要な設計要素の一つです。特に、固定IPアドレスが必要な場合や、高度なルーティング機能を実現したい場合には、NLB(Network Load Balancer)とALB(Application Load Balancer)を組み合わせた構成が選択肢の一つとなります。
本記事では、NLB+ALB+EC2という構成について、各サービスの特徴から設計時に考慮すべきポイントについて解説します。
NLB(Network Load Balancer)は、AWS が提供するレイヤー4(L4)のロードバランサーです。TCP/UDP/TLS トラフィックを処理し、超低レイテンシで高いスループットを実現します。
【主な特徴】
ALB(Application Load Balancer)は、レイヤー7(L7)のロードバランサーで、HTTP/HTTPS トラフィックの高度なルーティングが可能です。
【主な特徴】
EC2(Elastic Compute Cloud)は、AWS のクラウド上で仮想サーバーを提供するサービスです
様々なOSやスペックを用途に応じて選択でき、スケーラブルなコンピューティング環境を構築できます。
ALBのIPアドレスは動的に変更されるため、固定IPが必要な場合は、ALBの前段に固定IPを持つNLBを配置することでIPアドレスを固定できます。
なお、固定IPを持つAWS Global AcceleratorをALBの前段に配置することも選択肢の一つです。
ALBの柔軟なルーティング機能(パスベースルーティングやヘッダー情報による振り分けなど)を活用しつつ、NLBの固定IP機能も利用できます。
ALBにAWS WAFを統合してセキュリティを強化しながら、NLBで固定IPによるアクセス制御も同時に実現できます。
NLBとALBはどちらもTLS終端が可能なサービスです。
ただし、NLBのターゲットにALBを指定する場合、NLBではTLS終端できないという制限があります。
そのため、この構成ではALBでTLS終端を行うのが基本です。
この場合、NLBは通信内容を解析せず、受信したトラフィックをそのままALBに転送するパススルー動作となります。
NLBとALBは、どちらもターゲットグループの設定としてターゲットのヘルスチェック機能を持ちます。
ALBのヘルスチェック設定では、ターゲットのEC2上で動作するWebアプリケーションが、期待通りのステータスコードを返すプロトコルとパスを用意する必要があります。
一方、NLBのヘルスチェックは、ALBに対して行われます。成功条件は以下の通りです。
この条件を満たさない場合、ヘルスチェックは失敗するため注意が必要です。
NLB+ALBを前段に設置する場合、EC2上のアプリケーションで実際のクライアントIPアドレスを取得するには、以下の仕様に注意が必要です。
IPアドレスの伝播の流れ
X-Forwarded-Forヘッダーに格納してバックエンドに転送しますEC2側での取得方法
X-Forwarded-Forヘッダーから取得する必要がありますX-Forwarded-Forヘッダーを含めるよう設定しますX-Forwarded-Forヘッダーを優先的に参照するよう実装しますNLB+ALB+EC2構成は、固定IPアドレスと高度なルーティング機能を両立したい場合に非常に有効なアーキテクチャです。
一方で、構成が複雑になるため、運用面でのコスト増加には注意が必要です。
要件に応じて、単一のロードバランサー構成との比較検討を行い、最適なアーキテクチャを選択することが重要です。