ターゲットグループのヘルスチェック - Elastic Load Balancing

ターゲットグループのヘルスチェック

Application Load Balancer は、登録されたターゲットのステータスをテストするため、定期的にリクエストを送信します。これらのテストは、ヘルスチェックと呼ばれます。

各ロードバランサーノードは、ロードバランサーに対して有効になっているアベイラビリティーゾーンの正常なターゲットにのみ、リクエストをルーティングします。各ロードバランサーノードは、ターゲットが登録されているターゲットグループのヘルスチェック設定を使用して、各ターゲットの状態を確認します。ターゲットは、登録後に正常と見なされるためには、1 つのヘルスチェックに合格する必要があります。各ヘルスチェックが完了すると、ロードバランサーノードはヘルスチェック用に確立された接続を終了します。

ターゲットグループに異常な登録済みターゲットのみが含まれている場合、そのヘルスステータスにかかわらず、ロードバランサーはそれらすべてのターゲットにリクエストをルーティングします。つまり、有効なすべてのアベイラビリティーゾーン内で、すべてのターゲットが同時にヘルスチェックに失敗すると、ロードバランサーはオープンに失敗します。フェールオープンの効果は、ヘルスステータスにかかわらず、ロードバランシングのアルゴリズムに基づいて、有効なすべてのアベイラビリティーゾーン内のすべてのターゲットへのトラフィックを許可することです。

ヘルスチェックでは WebSocket はサポートされません。

ヘルスチェックの設定

次の表に示すように、ターゲットグループのターゲットのヘルスチェックを設定します。表で使用される設定名は、API で使用される名前です。ロードバランサーは、指定されたポート、プロトコル、および ping パスを使用して、HealthCheckIntervalSeconds 秒ごとに、登録された各ターゲットにヘルスチェックリクエストを送信します。各ヘルスチェックリクエストは独立しており、結果は間隔全体で存続します。ターゲットが応答するまでにかかる時間は、次のヘルスチェックリクエストまでの間隔に影響を与えません。ヘルスチェックが UnhealthyThresholdCount 連続失敗数のしきい値を超えると、ロードバランサーはターゲットをサービス停止中の状態にします。ヘルスチェックが HealthyThresholdCount 連続成功数のしきい値を超えると、ロードバランサーはターゲットを実行中の状態に戻します。

設定 説明

HealthCheckProtocol

ターゲットでヘルスチェックを実行するときにロードバランサーが使用するプロトコル。使用可能なプロトコルは HTTP および HTTPS です。デフォルトは HTTP プロトコルです。

これらのプロトコルは、HTTP GET メソッドを使用してヘルスチェックリクエストを送信します。

HealthCheckPort

ターゲットでヘルスチェックを実行するときにロードバランサーが使用するポート。デフォルトでは、各ターゲットがロードバランサーからトラフィックを受信するポートが使用されます。

HealthCheckPath

ターゲットでのヘルスチェックの送信先。

プロトコルバージョンが HTTP/1.1 または HTTP/2 の場合は、有効な URI (/ パス ?クエリ ) を指定します。デフォルトは / です。

プロトコルバージョンが grPC の場合は、カスタムヘルスチェックメソッドのパスを /package.service/method 形式で指定します。デフォルトは /AWS.ALB/healthcheck です。

HealthCheckTimeoutSeconds

ヘルスチェックを失敗と見なす、ターゲットからレスポンスがない時間 (秒単位)。範囲は 2~120 秒です。ターゲットタイプが instance または ip の場合のデフォルトは 5 秒で、ターゲットタイプが lambda の場合のデフォルトは 30 秒です。

HealthCheckIntervalSeconds

個々のターゲットのヘルスチェックの概算間隔 (秒単位)。範囲は 5 ~ 300 秒です。ターゲットタイプが instance または ip の場合のデフォルトは 30 秒で、ターゲットタイプが lambda の場合のデフォルトは 35 秒です。

HealthyThresholdCount

非正常なインスタンスが正常であると見なすまでに必要なヘルスチェックの連続成功回数。範囲は 2 ~ 10 です。デフォルトは 5 です。

UnhealthyThresholdCount

非正常なインスタンスが非正常であると見なすまでに必要なヘルスチェックの連続失敗回数。範囲は 2 ~ 10 です。デフォルトは 2 です。

マッチャー

ターゲットからの正常なレスポンスを確認するために使用するコード。これらは、コンソールでは [成功コード] と呼ばれます。

プロトコルバージョンが HTTP/1.1 または HTTP/2 の場合、指定できる値は 200~499 です。複数の値 (例: "200,202") または値の範囲 (例: "200-299") を指定できます。デフォルト値は 200 です。

プロトコルバージョンが grPC の場合、指定できる値は 0~99 です。複数の値 (例: "0,1") または値の範囲 (例: "0-5") を指定できます。デフォルト値は 12 です。

ターゲットヘルスステータス

ロードバランサーがターゲットにヘルスチェックリクエストを送信する前に、ターゲットグループに登録し、リスナールールでターゲットグループを指定して、ターゲットのアベイラビリティーゾーンがロードバランサーに対して有効になっていることを確認する必要があります。ターゲットがロードバランサーからリクエストを受信する前に、最初のヘルスチェックに合格する必要があります。ターゲットが最初のヘルスチェックに合格すると、ステータスは Healthy になります。

次の表は、登録されたターゲットのヘルスステータスの可能値を示しています。

説明

initial

ロードバランサーは、ターゲットを登録中か、ターゲットで最初のヘルスチェックを実行中です。

関連する理由コード : Elb.RegistrationInProgress | Elb.InitialHealthChecking

healthy

ターゲットは正常です。

関連する理由コード : なし

unhealthy

ターゲットはヘルスチェックに応答しなかったか、ヘルスチェックに合格しませんでした。

関連する理由コード :Target.ResponseCodeMismatch |Target.Timeout |Target.FailedHealthChecks |Elb.InternalError

unused

ターゲットがターゲットグループに登録されていないか、ターゲットグループがロードバランサーのリスナールールで使用されていないか、ロードバランサーに対して有効ではないアベイラビリティーゾーンにターゲットがあるか、ターゲットが停止または終了状態にあります。

関連する理由コード :Target.NotRegistered |Target.NotInUse |Target.InvalidState |Target.IpUnusable

draining

ターゲットは登録解除中で、Connection Draining 中です。

関連する理由コード : Target.DeregistrationInProgress

unavailable

ターゲットグループのヘルスチェックは無効になっています。

関連する理由コード : Target.HealthCheckDisabled

ヘルスチェックの理由コード

ターゲットのステータスが Healthy 以外の値の場合、API は問題の理由コードと説明を返し、コンソールのツールヒントで同じ説明が表示されます。Elb で始まる理由コードはロードバランサー側で発生し、Target で始まる理由コードはターゲット側で発生します。

理由コード 説明

Elb.InitialHealthChecking

最初のヘルスチェックが進行中です

Elb.InternalError

内部エラーのため、ヘルスチェックに失敗しました

Elb.RegistrationInProgress

ターゲットの登録中です

Target.DeregistrationInProgress

ターゲットの登録解除中です

Target.FailedHealthChecks

ヘルスチェックに失敗しました

Target.HealthCheckDisabled

ヘルスチェックは無効になっています。

Target.InvalidState

ターゲットが停止状態にあります

ターゲットは終了状態にあります

ターゲットは終了状態か、または停止状態にあります

ターゲットは無効な状態にあります

Target.IpUnusable

IP アドレスはロードバランサーによって使用されているので、ターゲットとして使用できません

Target.NotInUse

ターゲットグループは、ロードバランサーからトラフィックを受信するように設定されていません

ロードバランサーが有効になっていないアベイラビリティーゾーンにターゲットがあります

Target.NotRegistered

ターゲットはターゲットグループに登録されていません

Target.ResponseCodeMismatch

次のコードでヘルスチェックに失敗しました: [code]

Target.Timeout

リクエストがタイムアウトしました

ターゲットのヘルスステータスをチェックする

ターゲットグループに登録されたターゲットのヘルスステータスをチェックできます。

New console
新しいコンソールを使用してターゲットのヘルスをチェックするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [ターゲット] タブの [ステータス] 列は、各ターゲットのステータスを示します。

  5. ステータスの値が Healthy 以外の場合は、[ステータスの詳細] 列に詳細情報が表示されます。

Old console
コンソールを使用してターゲットのヘルスを確認するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

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

  4. [ターゲット] タブの [ステータス] 列は、各ターゲットのステータスを示します。

  5. ステータスの値が Healthy 以外の場合は、詳細についてツールヒントを参照してください。

AWS CLI を使用してターゲットのヘルスステータスをチェックするには

describe-target-health コマンドを使用します。このコマンドの出力にはターゲットのヘルス状態が含まれます。ステータスの値が Healthy 以外の場合は、理由コードも出力に含まれています。

異常なターゲットに関する E メール通知を受信するには

CloudWatch アラームを使用して、異常なターゲットに関する詳細を送信する Lambda 関数をトリガーします。ステップバイステップの手順については、ブログ投稿「ロードバランサーの異常なターゲットを特定する」を参照してください。

ターゲットグループのヘルスチェック設定を変更する

ターゲットグループのヘルスチェック設定はいつでも変更できます。

New console
新しいコンソールを使用してターゲットグループのヘルスチェック設定を変更するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [グループの詳細] タブの [ヘルスチェックの設定] セクションで、[編集] を選択します。

  5. [ヘルスチェックの編集の設定] ページで、必要に応じて設定を変更し、[変更内容の保存] を選択します。

Old console
古いコンソールを使用してターゲットグループのヘルスチェック設定を変更するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

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

  4. [ヘルスチェック] タブで、[編集] を選択します。

  5. [Edit target group] ページで、必要に応じて設定を変更し、[Save] を選択します。

AWS CLI を使用してターゲットグループのヘルスチェック設定を変更するには

modify-target-group コマンドを使用します。