ロードバランサー

機能

  • 負荷分散
  • 死活監視による 可用性 向上

ELB

AWS は ELB(Elastic Load Balancing)として以下のサービスを提供しています。

  • ALB(Application Load Balancer)
    • セキュリティグループ、WAFを設定可
  • NLB(Network Load Balancer)
    • WAFは設定不可
    • セキュリティグループは2023年8月10日のアップデート以降、NLBに直接設定可能(それ以前は設定不可だった) ref. https://aws.amazon.com/about-aws/whats-new/2023/08/network-load-balancer-supports-security-groups/
  • GLB(Gateway Load Balancer)
  • CLB(Classic Load Balancer)

1つのターゲットグループを複数のロードバランサーに設定することはできない(ターゲットグループは常に1つのロードバランサーにのみ関連付けられる)。ただし1つのロードバランサーは複数のターゲットグループを持つことができる(パスベース/ホストベースルーティングなど)ため、正確には「ターゲットグループ → ロードバランサーは多対1」の関係。

ALB

ALBのおもな機能は以下のとおりです。

  • OSI参照モデル第7層で動作(おもにHTTP/HTTPSで使用されるがgRPCなども使用できる)
  • AWS WAF、Amazon Cognitoとの連携
  • ホストヘッダやURLパスなどの条件にもとづくルーティング
  • SSLとの連携

使用可能な条件

  • ホストヘッダー
  • パスパターン
  • HTTPヘッダー
  • HTTPメソッド
  • クエリ文字列
  • 送信元IP

ターゲットグループ

  • インスタンス
  • IPアドレス
  • Lambda関数

※ ALBのターゲットグループにALBは指定できない(NLBはALBを指定できる)。

アルゴリズム

  • ラウンドロビン

スティッキーセッション

  • ALBが生成した2つのCookie(AWSALB、AWSALBCORS)を使用
  • アプリケーションが生成したCookieを使用

Application Load Balancer のスティッキーセッション

アプリケーションのプライベート化

ALBを使用することによってアプリケーションをプライベートサブネットに配置することができます。
プライベートサブネットに配置することによってセキュリティが高まります。

ALB経由でプリベートサブネットにアクセス

Auto Scalling

EC2

  • Auto Scalling機能はターゲットグループと紐付けたAuto Scallingグループが使用される

ECS

ECSのサービスを作成する際にサービス定義でターゲットグループを指定することで、動的ポートマッピングによりECSは動的に変化するコンテナのポートとインスタンスを自動的にターゲットグループに登録、解除してくれます。

AWS認定 高度なネットワーキング - 専門知識位 p157

X-Forwarded-For

ALBではクライアントIPをアプリケーションにHTTPヘッダのX-Forwarded-Forを使って渡します。

HTTP ヘッダーと Application Load Balancer

ACM ALBにACM設定してECSに登録

Application Load Balancer を作成し、Amazon ECS タスクを自動的に登録する方法を教えてください。から引用

  1. ACMを設定
  2. Target Groupを作成する
    1. TypeはIP Address
    2. ECS Serviceを起動するVPCを選択する
  3. ALBを作成
    1. ACMを関連付ける
    2. Target Groupを関連付ける
    3. Security Groupを設定する
  4. ECS Serviceを作成する 1.ALBを指定する
    1. Target Groupを指定する(ECS Service起動時にPrivate IP adressで指定したTarget GroupTargetに追加される)

ロードバランサー

ロードバランサー2

ロードバランサー3

ルーティング

CloudFormation

  • ロードバランサー:AWS::ElasticLoadBalancingV2::LoadBalancer
  • リスナー:AWS::AWS::ElasticLoadBalancingV2::Listener
  • ターゲットグループ:AWS::ElasticLoadBalancingV2::TargetGroup

ロードバランサーのタイプ

  • ALB:AWS::ElasticLoadBalancingV2::LoadBalancer.Properties.Type.application

NLBとの違い

NLBとの違いは以下のとおり。

  • NLBはロードバランサーのIPを固定できる
  • NLBはクライアントのIPをIPヘッダに保持したままアプリケーションにアクセスできる
  • NLBはAmazon Cognito、AWS WAFが使用できない
  • NLBはホストヘッダやURLのパスに基づくルーティングができない
  • NLBは2023年8月10日のアップデート以降、セキュリティグループを設定できる(それ以前は不可だった)
    • それ以前の世代の構成や、NLB自体にSGを設定しない構成では、アクセス制御はNLBを配置するサブネットのNetwork ACLやターゲットインスタンスのセキュリティグループで実施する
    • ref. https://aws.amazon.com/about-aws/whats-new/2023/08/network-load-balancer-supports-security-groups/
  • NLBもスティッキーセッションはALB同様使用できる
  • NLBのアルゴリズムはフローハッシュアルゴリズム