Elastic Load Balancing
Application Load Balancer

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

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

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

ルーティング設定

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

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

  • プロトコル: HTTP、HTTPS

  • ポート: 1 ~ 65535

ターゲットグループが HTTPS プロトコルを使用して設定されているか、HTTPS ヘルスチェックを使用する場合、ターゲットへの SSL/TLS 接続には 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 にピアリング接続されている 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 にピアリング接続されている 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. 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 をサポートしている必要があります。

ロードバランサーは、クライアントから初めてリクエストを受信すると、そのリクエストをターゲットにルーティングし、選択されたターゲットに関する情報をエンコードする AWSALB という Cookie を生成し、Cookie を暗号化し、Cookie をクライアントへのレスポンスに含めます。クライアントは、受信した Cookie を、ロードバランサーへの後続のリクエストに含める必要があります。ロードバランサーがクライアントから Cookie を含むリクエストを受信したときに、ターゲットグループのスティッキーセッションが有効になっており、かつリクエストが同じターゲットグループに送信されると、ロードバランサーは Cookie を検出し、リクエストを同じターゲットにルーティングします。Cookie は存在するがデコードできない場合、あるいは登録解除されたターゲットまたは異常なターゲットを参照している場合、ロードバランサーは新しいターゲットを選択し、新しいターゲットに関する情報で Cookie を更新します。

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

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

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

Application Load Balancer は、Max-Age ヘッダーの代わりに Cookie ヘッダーの Expires 属性を使用します。

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

  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 コマンドを使用します。