0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon ALB(ELBの一種)

Last updated at Posted at 2025-03-14

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オフロードの流れ

  1. クライアント(ブラウザやアプリ)がHTTPSリクエストを送信
  2. ALBがSSL/TLSの復号を行い、プレーンなHTTPリクエストに変換
  3. ALBがバックエンドサーバー(EC2やコンテナ)にHTTPリクエストを転送
  4. バックエンドサーバーがレスポンスを返す
  5. 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ターミネーションやヘルスチェック機能でセキュアな運用が可能になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?