Elastic Load Balancing
Application Load Balancer

Application Load Balancer のターゲットグループ

ターゲットグループは、1 つ以上の登録されているターゲットにリクエストをルーティングするために使用されます。各リスナーのルールを作成するときに、ターゲットグループと条件を指定します。ルールの条件が満たされると、トラフィックが該当するターゲットグループに転送されます。さまざまなタイプのリクエストに応じて別のターゲットグループを作成できます。たとえば、一般的なリクエスト用に 1 つのターゲットグループを作成し、アプリケーションのマイクロサービスへのリクエスト用に別のターゲットグループを作成できます。詳細については、「Application Load Balancer コンポーネント」を参照してください。

ロードバランサーのヘルスチェック設定は、ターゲットグループ単位で定義します。各ターゲットグループはデフォルトのヘルスチェック設定を使用します。ただし、ターゲットグループを作成したときや、後で変更したときに上書きした場合を除きます。リスナーのルールでターゲットグループを指定すると、ロードバランサーは、ロードバランサーで有効なアベイラビリティーゾーンにある、ターゲットグループに登録されたすべてのターゲットの状態を継続的にモニタリングします。ロードバランサーは、正常な登録済みターゲットにリクエストをルーティングします。

ルーティング設定

デフォルトでは、ロードバランサーはターゲットグループの作成時に指定したプロトコルとポート番号を使用して、リクエストをターゲットにルーティングします。または、ターゲットグループへの登録時にターゲットへのトラフィックのルーティングに使用されるポートを上書きすることもできます。

ターゲットグループでは、次のプロトコルとポートがサポートされています。

  • プロトコル: HTTP、HTTPS

  • ポート: 1 ~ 65535

ターゲットグループが HTTPS プロトコルを使用して設定されているか、HTTPS ヘルスチェックを使用する場合、ターゲットへの SSL 接続には ELBSecurityPolicy2016-08 ポリシーのセキュリティ設定が使用されます。

ターゲットの種類

ターゲットグループを作成するときは、そのターゲットの種類を指定します。それにより、このターゲットグループ内でターゲットを登録するときに指定するターゲットの種類が決定されます。ターゲットグループを作成した後で、ターゲットの種類を変更することはできません。

可能なターゲットの種類は次のとおりです。

instance

インスタンス ID で指定されたターゲット。

ip

ターゲットは IP アドレスです。

lambda

ターゲットは Lambda 関数です。

ターゲットの種類が ip の場合、次のいずれかの CIDR ブロックから IP アドレスを指定できます。

  • ターゲットグループの VPC のサブネット

  • 10.0.0.0/8 (RFC 1918)

  • 100.64.0.0/10 (RFC 6598)

  • 172.16.0.0/12 (RFC 1918)

  • 192.168.0.0/16 (RFC 1918)

これらのサポートされている CIDR ブロックを使用すると、ClassicLink インスタンス、ピアリング接続 VPC 内のインスタンス、IP アドレスとポートでアドレス指定できる AWS リソース (たとえば、データベース)、AWS Direct Connect または VPN 接続を介して AWS にリンクされたオンプレミスリソースをターゲットグループに登録できます。

重要

パブリックにルーティング可能な IP アドレスは指定できません。

インスタンス ID を使用してターゲットを指定すると、トラフィックはインスタンスのプライマリネットワークインターフェイスで指定されたプライマリプライベート IP アドレスを使用して、インスタンスにルーティングされます。IP アドレスを使用してターゲットを指定する場合は、1 つまたは複数のネットワークインターフェイスからのプライベート IP アドレスを使用して、トラフィックをインスタンスにルーティングできます。これにより、インスタンスの複数のアプリケーションが同じポートを使用できるようになります。各ネットワークインターフェイスは独自のセキュリティグループを持つことができます。

ターゲットグループのターゲットの種類が lambda である場合、1 つの Lambda 関数を登録できます。ロードバランサーが Lambda 関数のリクエストを受け取ると、Lambda 関数を呼び出します。詳細については、「ターゲットとしての Lambda 関数」を参照してください。

登録済みターゲット

ロードバランサーは、クライアントにとって単一の通信先として機能し、正常な登録済みターゲットに受信トラフィックを分散します。各ターゲットは、1 つ以上のターゲットグループに登録できます。異なるポートを使用して、各 EC2 インスタンスまたは IP アドレスを同じターゲットグループに複数回登録できます。これにより、ロードバランサーはリクエストをマイクロサービスにルーティングできます。

アプリケーションの需要が高まった場合、需要に対処するため、1 つまたは複数のターゲット グループに追加のターゲットを登録できます。登録処理が完了し、ターゲットが最初のヘルスチェックに合格するとすぐに、ロードバランサーは新しく登録したターゲットへのリクエストのルーティングを開始します。

アプリケーションの需要が低下した場合や、ターゲットを保守する必要がある場合、ターゲットグループからターゲットを登録解除することができます。ターゲットを登録解除するとターゲットグループから削除されますが、ターゲットにそれ以外の影響は及びません。登録解除するとすぐに、ロードバランサーはターゲットへのリクエストのルーティングを停止します。ターゲットは、未処理のリクエストが完了するまで draining 状態になります。リクエストの受信を再開する準備ができると、ターゲットをターゲットグループに再度登録することができます。

インスタンス ID でターゲットを登録する場合は、Auto Scaling グループでロードバランサーを使用できます。Auto Scaling グループにターゲットグループをアタッチすると、ターゲットの起動時に Auto Scaling によりターゲットグループにターゲットが登録されます。詳細については、『Amazon EC2 Auto Scaling ユーザーガイド』の「Auto Scaling グループにロードバランサーをアタッチする」を参照してください。

制限

  • 同じ VPC に別の Application Load Balancer の IP アドレスを登録することはできません。他の Application Load Balancer がピアリング接続先 VPC にある場合は、その IP アドレスを登録することができます。

ターゲットグループの属性

ターゲットグループの種類が instance または ip である場合、以下のターゲットグループ属性がサポートされています。

deregistration_delay.timeout_seconds

ターゲットを登録解除する前に Elastic Load Balancing が待機する時間。範囲は 0~3600 秒です。デフォルト値は 300 秒です。

slow_start.duration_seconds

ロードバランサーが新しく登録されたターゲットに、ターゲットグループに対するトラフィックのシェアを直線的に増加させて送信する期間 (秒)。範囲は 30~900 秒 (15 分) です。デフォルトは 0 秒 (無効) です。

stickiness.enabled

スティッキーセッションが有効かどうかを示します。

stickiness.lb_cookie.duration_seconds

Cookie の有効期間 (秒単位) です。この期間が過ぎると、Cookie は古いと見なされます。最小値は 1 秒で、最大値は 7 日間 (604800秒) です。デフォルト値は 1 日 (86400 秒) です。

stickiness.type

維持の種類です。有効な値は lb_cookie です。

ターゲットグループの種類が lambda である場合、以下のターゲット属性がサポートされています。

lambda.multi_value_headers.enabled

ロードバランサーと Lambda 関数との間で交換されるリクエストとレスポンスのヘッダーに、値のまたは文字列の配列が含まれるかどうかを示します。使用できる値は、true または false です。デフォルト値は false です。詳細については、「複数値のヘッダー」を参照してください。

登録解除の遅延

Elastic Load Balancing は、登録解除するターゲットへのリクエストの送信を停止します。デフォルトでは、Elastic Load Balancing 登録解除プロセスを完了する前に 300 秒待って、ターゲットへ処理中のリクエストが完了するのを助けることができます。Elastic Load Balancing が待機する時間を変更するには、登録解除の遅延値を更新します。

登録解除するターゲットの初期状態は draining です。登録解除の遅延が経過すると、登録解除プロセスは完了し、ターゲットの状態は unused になります。ターゲットが Auto Scaling グループの一部である場合、ターゲットを終了して置き換えることができます。

登録解除するターゲットに未処理のリクエストやアクティブな接続がない場合は、Elastic Load Balancing は登録解除の遅延時間が経過するのを待たずに、即時登録解除プロセスを完了します。ただし、ターゲットの登録解除が完了しても、ターゲットのステータスは、登録解除の遅延が経過するまで draining と表示されます。

登録解除の遅延が経過する前に登録解除するターゲットが接続を終了すると、クライアントは 500 レベルのエラー応答を受信します。

コンソールを使用して登録解除の遅延値を更新するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [Target Groups] を選択します。

  3. ターゲットグループを選択します。現在の値が [説明] タブに [登録解除の遅延] として表示されます。

  4. [Description] タブで、[Edit attributes] を選択します。

  5. [Edit attributes] ページで、必要に応じて [Deregistration delay] の値を変更し、[Save] を選択します。

AWS CLI を使用して登録解除の遅延値を更新するには

deregistration_delay.timeout_seconds 属性を指定して modify-target-group-attributes コマンドを使用します。

スロースタートモード

デフォルトでは、ターゲットはターゲットグループを使用して登録され初期ヘルスチェックを渡した後、すぐにリクエストの全シェアを受信し始めます。スロースタートモードを使用すると、ロードバランサーがターゲットにリクエストの全シェアを送信し始めるまでの猶予期間が設定されます。ターゲットグループでスロースタートが有効化されると、ターゲットはそのターゲットグループに登録されたときにスロースタートモードに入り、設定されたスロースタート期間が経過したときにスロースタートモードを終了します。ロードバランサーは、スロースタートモードのターゲットに送信できるリクエスト数を直線的に増加させます。ターゲットがスロースタートモードを終了すると、ロードバランサーはリクエストの全シェアを送信できます。

考慮事項

  • ターゲットグループでスロースタートを有効にする場合、既にそのターゲットグループに登録済みのターゲットをスロースタートモードに入りません。

  • 空のターゲットグループでスロースタートを有効にし、その後、単一登録オペレーションを使用して 1 つ以上のターゲットを登録すると、それらのターゲットはスロースタートモードに入りません。新しく登録されたターゲットは、スロースタートモードになっていない登録済みターゲットが 1 つ以上ある場合にのみスロースタートモードに入ります。

  • スロースタートモードのターゲットを登録解除すると、そのターゲットはスロースタートモードを終了します。同じターゲットを再度登録すると、再度スロースタートモードに入ります。

  • スロースタートモードのターゲットに異常が発生してから、期間が経過する前に正常に戻った場合、そのターゲットはスロースタートモードを維持し、期間の残りが経過してからスロースタートモードを終了します。スロースタートモードではないターゲットが異常な状態から正常に変わった場合は、スロースタートモードに入りません。

コンソールを使用してスロースタート期間の値を更新するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [Target Groups] を選択します。

  3. ターゲットグループを選択します。現在の値が [説明] タブに [スロースタート期間] として表示されます。

  4. [Description] タブで、[Edit attributes] を選択します。

  5. [属性の編集] ページで、必要に応じて [スロースタート期間] の値を変更し、[保存] を選択します。スロースタートモードを無効にするには、期間を 0 に設定します。

AWS CLI を使用してスロースタート期間の値を更新するには

slow_start.duration_seconds 属性を指定して modify-target-group-attributes コマンドを使用します。

スティッキーセッション

スティッキーセッションは、ターゲットグループ内の同じターゲットにリクエストをルーティングするメカニズムです。これは、クライアントに連続したエクスペリエンスを提供するために状態情報を維持するサーバーに役立ちます。スティッキーセッションを使用するには、クライアントが Cookie をサポートしている必要があります。

ロードバランサーは、クライアントから最初のリクエストを受信すると、リクエストをターゲットにルーティングし、クライアントへのレスポンスに含める Cookie を生成します。そのクライアントからの次のリクエストには、Cookie が含まれています。スティッキーセッションがターゲットグループに対して有効であり、リクエストが同じターゲットグループに送信される場合、ロードバランサーは Cookie を検出して同じターゲットにリクエストをルーティングします。

Application Load Balancer はロードバランサーによって生成されるクッキーのみをサポートします。Cookie 名は、AWSALB です。このクッキーのコンテンツはローテーションキーを使用して暗号化されます。ロードバランサーによって生成されたクッキーを複合あるいは編集することはできません。

WebSockets 接続は本来はスティッキーです。クライアントが WebSockets へ接続アップグレードをリクエストする場合、接続アップグレードを受け入れるために HTTP 101 のステータスコードを返したターゲットが、WebSockets 接続で使用されるターゲットです。WebSockets のアップグレードが完了したら、Cookie ベースの維持は使用されません。

ターゲットグループレベルでスティッキーセッションを有効にします。ロードバランサー生成のクッキーの維持期間を秒単位で設定することもできます。期間はリクエストごとに設定されます。そのため、各期間の有効期限が切れる前にクライアントがリクエストを送信すると、スティッキセッションが継続されます。複数のターゲットグループのスティッキーセッションを有効にした場合、すべてのターゲットグループに同じ継続時間を設定することをお勧めします。

コンソールを使用してスティッキーセッションを有効にするには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [Target Groups] を選択します。

  3. ターゲットグループを選択します。

  4. [Description] タブで、[Edit attributes] を選択します。

  5. [Edit attributes] ページで、以下を実行します。

    1. [Enable load balancer generated cookie stickiness] を選択します。

    2. [Stickiness duration] で、1 秒から 7 日の間の値を指定します。

    3. [Save] を選択します。

AWS CLI を使用してスティッキーセッションを有効にするには

stickiness.enabled および stickiness.lb_cookie.duration_seconds 属性を指定して modify-target-group-attributes コマンドを使用します。