ALB(Application Load Balancer)とは
アプリケーション層(L7)で動くWebサービスのトラフィックを負荷分散させるAWSのロードバランシングサービス(ELB)の一部として利用できる機能
ALBの構成要素
リスナー(Listener)
ALBが受け付けるリクエストのポートとプロトコルを定義します
ポート
ALBがリクエストを待ち受けるネットワークポート(例: HTTPの場合はポート80、HTTPSの場合はポート443)
プロトコル
通信に使用するプロトコル(例: HTTP, HTTPS)
リスナールール(Listener Rules)
リスナーが受け取ったリクエストに対してどのターゲットグループに転送するかを決める条件
主なルーティング条件
- パスベースルーティング
- リクエストのURLパス部分に基づいてルーティングを行います
- 例:
/api/*
というパスが含まれているリクエストはAPI用のターゲットグループにルーティングを行うなど
- ホストベースルーティング
- リクエストのホスト名(ドメイン名)に基づいてルーティングを行います
- 例:
api.example.com
というホスト名のリクエストをAPIサーバー用ターゲットグループにルーティングを行うなど
- ヘッダー、クエリパラメータベースルーティング
- リクエストのHTTPヘッダーやクエリパラメータに基づいてルーティングを行います
- 例:ヘッダーに
X-Region: Japan
が含まれているリクエストの場合、日本リージョンのターゲットグループにルーティングを行うなど
ターゲット(Target)
実際にリクエストを処理するバックエンドリソース
ターゲットのリソース
- EC2インスタス: アプリケーションサーバーやWebサーバー
- ECS(Elastic Container Service): コンテナ化されたアプリケーション
- Lambda関数: サーバーレスアーキテクチャでの処理
- IPアドレス: オンプレミスや異なるVPC内のサーバー
ターゲットグループ(Target Group)
複数のターゲットをグループ化するための単位であり、ALBがリクエストを転送する先となるリソースの集合
ターゲットの管理
同じ目的を持つターゲット(EC2インスタンス、ECSタスク、Lambda関数など)をグループ化して、効率的に管理できます
ヘルスチェック
ターゲットが正常かどうかを監視するヘルスチェックが設定できます。正常なターゲットにのみリクエストが転送されるように動作します
柔軟なルーティング
リスナールールに基づいて、ALBがリクエストを適切なターゲットグループに転送します
ロードバランサーとは
複数のサーバーにトラフィックを分散して負荷を均等にする仕組み
ロードバランサーの種類
ALB(Application Load Balancer)
アプリケーション層(L7)で動作するロードバランサー
使用目的
- Webアプリケーションを作成する場合
- HTTPリクエストの負荷分散を行う場合
NLB(Network Load Balancer)
トランスポート層(L4)で動作するロードバランサー
使用場面
TCP/UDPアプリ(固定IPが必要)
CLB(Classic Load Balancer)
- 従来型(旧世代)のロードバランサー
- 新規利用は非推奨
ALBの機能
ルーティング
- パスベースルーティング
- ホストベースルーティング
- ヘッダー・クエリパラメータベースルーティング
- メソッドベースルーティング
- HTTPメソッド(GET, POST, PUT など)に応じたルーティングが可能です
- Cookieベースルーティング
- 特定のCookieがある場合に異なるターゲットグループをルーティングできます
負荷分散
複数のターゲット(EC2インスタンス、ECSコンテナ、Lambdaなど)にトラフィックを分散させ、負荷を均等化します
- ターゲットのヘルスチェックを実施し、正常なターゲットにのみリクエストを転送
- スケールアウトに対応し、増減するターゲットに適応
- 複数のアベイラビリティゾーン(AZ)にまたがる分散も可能
ヘルスチェック
ターゲットのヘルスチェックを行い、正常に応答できるターゲットにのみトラフィックを送ります
セッション維持
特定のユーザーが同じターゲットにリクエストを送り続けるようにする機能です
- Cookieベースのセッション維持(ターゲットグループで設定可能)
- ユーザーごとのセッションを維持することで、特定の処理が必要なアプリケーション(ショッピングカートなど)に適している
TLS/SSLターミネーション
TLS/SSL証明書を管理し、HTTPSリクエストをオフロードできます
- ACM(AWS Certificate Manager)と統合し、証明書の自動更新が可能
- HTTPSリクエストをALBで処理し、バックエンドにはHTTPで転送して負荷を軽減
- SSL/TLSの暗号化・復号処理はCPU負荷が高いから
HTTPSオフロードの流れ
- クライアント(ブラウザやアプリ)がHTTPSリクエストを送信
- ALBがSSL/TLSの復号を行い、プレーンなHTTPリクエストに変換
- ALBがバックエンドサーバー(EC2やコンテナ)にHTTPリクエストを転送
- バックエンドサーバーがレスポンスを返す
- ALBがレスポンスを受け取り、再びHTTPSで暗号化してクライアントへ送信
Lambdaとの統合
ターゲットとしてLambda関数を直接呼び出し可能です
- サーバーレスアプリケーションのロードバランシングが可能
- REST APIのフロントエンドとしてLambdaを使用可能
WebSocket & HTTP/2
- WebSocket をサポートし、リアルタイム通信が可能(チャットアプリ、ゲームなど)
- HTTP/2 をサポートし、高速な通信が可能
WAF統合
- AWS WAF(Web Application Firewall)と統合し、不正アクセスやDDoS攻撃から保護
- SQLインジェクションやXSS攻撃を防ぐルール設定が可能
アクセスログ & 監視
- CloudWatchと統合し、トラフィックやエラーレートを監視
- S3にアクセスログを保存し、分析が可能
まとめ
ALBは、AWSのロードバランシングサービスの一部で、Webサービスのトラフィックを効率的に負荷分散し、アプリケーション層で細かいルーティングやセッション維持などを提供します。これにより、スケーラブルで高可用性のあるアプリケーションを実現し、TLS/SSLターミネーションやヘルスチェック機能でセキュアな運用が可能になります。