

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Application Load Balancer ターゲットグループのヘルスチェック
<a name="target-group-health-checks"></a>

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

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

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

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

詳細については、「[ターゲットグループの正常性](load-balancer-target-groups.md#target-group-health)」を参照してください。

ヘルスチェックログを使用して、ロードバランサーの登録済みターゲットに対して行われたヘルスチェックに関する詳細情報をキャプチャし、Amazon S3 にログファイルとして保存できます。これらのヘルスチェックログを使用して、ターゲットの問題のトラブルシューティングを行うことができます。詳細については、「[ヘルスチェックログ](load-balancer-health-check-logs.md)」を参照してください。

**Topics**
+ [ヘルスチェックの設定](#health-check-settings)
+ [ターゲットヘルスステータス](#target-health-states)
+ [ヘルスチェックの理由コード](#target-health-reason-codes)
+ [ターゲットのヘルスをチェックする](check-target-health.md)
+ [ヘルスチェックの設定を更新する](modify-health-check-settings.md)

## ヘルスチェックの設定
<a name="health-check-settings"></a>

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

ターゲットの登録を解除すると、**HealthyHostCount** は減少しますが、**UnhealthyHostCount** は増加しないことに注意してください。


| 設定 | 説明 | 
| --- | --- | 
| **HealthCheckProtocol** |  ターゲットでヘルスチェックを実行するときにロードバランサーが使用するプロトコル。Application Load Balancer の場合、使用可能なプロトコルは 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 です。  | 

## ターゲットヘルスステータス
<a name="target-health-states"></a>

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

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


| 値 | 説明 | 
| --- | --- | 
| `initial` |  ロードバランサーは、ターゲットを登録中か、ターゲットで最初のヘルスチェックを実行中です。 関連する理由コード:`Elb.RegistrationInProgress`\$1`Elb.InitialHealthChecking`  | 
| `healthy` |  ターゲットは正常です。 関連する理由コード:なし  | 
| `unhealthy` |  ターゲットはヘルスチェックに応答しなかったか、ヘルスチェックに合格しませんでした。 関連する理由コード :`Target.ResponseCodeMismatch` \$1`Target.Timeout` \$1`Target.FailedHealthChecks` \$1`Elb.InternalError`   | 
| `unused` |  ターゲットがターゲットグループに登録されていないか、ターゲットグループがロードバランサーのリスナールールで使用されていないか、ロードバランサーに対して有効ではないアベイラビリティーゾーンにターゲットがあるか、ターゲットが停止または終了状態にあります。 関連する理由コード :`Target.NotRegistered` \$1`Target.NotInUse` \$1`Target.InvalidState` \$1`Target.IpUnusable`  | 
| `draining` |  ターゲットは登録解除中で、Connection Draining 中です。 関連する理由コード : `Target.DeregistrationInProgress`  | 
| `unavailable` |  ターゲットグループのヘルスチェックは無効になっています。 関連する理由コード : `Target.HealthCheckDisabled`  | 

## ヘルスチェックの理由コード
<a name="target-health-reason-codes"></a>

ターゲットのステータスが `Healthy` 以外の値の場合、API は問題の理由コードと説明を返し、コンソールで同じ説明が表示されます。`Elb` で始まる理由コードはロードバランサー側で発生し、`Target` で始まる理由コードはターゲット側で発生します。ヘルスチェックの失敗が考えられる原因の詳細については、「[トラブルシューティング](load-balancer-troubleshooting.md#target-not-inservice)」を参照してください。


| 理由コード | 説明 | 
| --- | --- | 
| `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` |  リクエストがタイムアウトしました  | 

# Application Load Balancer ターゲットのヘルスをチェックする
<a name="check-target-health"></a>

ターゲットグループに登録されたターゲットのヘルスステータスをチェックできます。ヘルスチェックの失敗に関するヘルプについては、[「トラブルシューティング: 登録されたターゲットが実行中でない](load-balancer-troubleshooting.md#target-not-inservice)」を参照してください。

ヘルスチェックログを使用して、ロードバランサーの登録済みターゲットに対して行われたヘルスチェックに関する詳細情報をキャプチャし、Amazon S3 にログファイルとして保存できます。これらのヘルスチェックログを使用して、ターゲットの問題のトラブルシューティングを行うことができます。詳細については、「[ヘルスチェックログ](load-balancer-health-check-logs.md)」を参照してください。

------
#### [ Console ]

**ターゲットのヘルスをチェックするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインの [** Load Balancing (ロードバランシング) **] で [** Target Groups (ターゲットグループ) **] を選択します。

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

1. **[詳細]** タブには、ターゲットの総数と各ヘルスステータスのターゲット数が表示されます。

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

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

**異常なターゲットに関する E メール通知を受信するには**  
CloudWatch アラームを使用して、異常なターゲットに関する詳細を送信する Lambda 関数をトリガーします。ステップバイステップの手順については、ブログ投稿「[ロードバランサーの異常なターゲットを特定する](https://aws.amazon.com/blogs/networking-and-content-delivery/identifying-unhealthy-targets-of-elastic-load-balancer/)」を参照してください。

------
#### [ AWS CLI ]

**ターゲットのヘルスをチェックするには**  
[describe-target-health](https://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-target-health.html) コマンドを使用します。この例では、出力をフィルタリングして、正常でないターゲットのみを含めます。正常でないターゲットでは、出力に理由コードが含まれます。

```
aws elbv2 describe-target-health \
    --target-group-arn target-group-arn \
    --query "TargetHealthDescriptions[?TargetHealth.State!='healthy'].[Target.Id,TargetHealth.State,TargetHealth.Reason]" \
    --output table
```

以下は出力の例です。

```
----------------------------------------------
|            DescribeTargetHealth            |
+--------------+---------+-------------------+
|  172.31.0.57 |  unused |  Target.NotInUse  |
|  172.31.0.50 |  unused |  Target.NotInUse  |
+--------------+---------+-------------------+
```

------

## ターゲットの状態と理由コード
<a name="target-states-reason-codes"></a>

次のリストは、各ターゲット状態において考えられる理由コードを表示しています。

**ターゲットの状態は healthy です**  
理由コードが指定されていません。

**ターゲットの状態は initial です**  
+  `Elb.RegistrationInProgress` - ターゲットはロードバランサーに登録中です。
+  `Elb.InitialHealthChecking` - ロードバランサーは、ヘルスステータスを判断するために必要なヘルスチェックの最小数をターゲットに送信しています。

**ターゲットの状態は unhealthy です**  
+ `Target.ResponseCodeMismatch` - ヘルスチェックで、予想される HTTP コードが返されませんでした。
+ `Target.Timeout` - ヘルスチェックリクエストがタイムアウトしました。
+ `Target.FailedHealthChecks` - ターゲットへの接続を確立中にロードバランサーがエラーを受け取ったか、ターゲットレスポンスの形式が正しくありません。
+ `Elb.InternalError` - 内部エラーのため、ヘルスチェックに失敗しました

**ターゲットの状態は unused です**  
+ `Target.NotRegistered` - ターゲットはターゲットグループに登録されていません。
+ `Target.NotInUse` - ターゲットグループはロードバランサーによって使用されていないか、ターゲットがロードバランサーに対して有効化されていないアベイラビリティーゾーンにあります。
+ `Target.InvalidState` - ターゲットは停止状態か終了状態です。
+ `Target.IpUnusable` - ターゲット IP アドレスは、ロードバランサーによる使用向けに予約されています。

**ターゲットの状態は draining です**  
+ `Target.DeregistrationInProgress` - ターゲットは登録解除中であり、登録解除の遅延期間が終了していません。

**ターゲットの状態は unavailable です**  
+ `Target.HealthCheckDisabled` - ターゲットグループのヘルスチェックは無効になっています。

# Application Load Balancer ターゲットグループのヘルスチェック設定を更新する
<a name="modify-health-check-settings"></a>

ターゲットグループのヘルスチェック設定は随時変更できます。ヘルスチェック設定のリストについては、「[ヘルスチェックの設定](target-group-health-checks.md#health-check-settings)」を参照してください。

------
#### [ Console ]

**ヘルスチェックの設定を更新するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインの [** Load Balancing (ロードバランシング) **] で [** Target Groups (ターゲットグループ) **] を選択します。

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

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

1. **[ヘルスチェックの編集を設定]** ページで、必要に応じて設定を変更します。

1. **[Save changes]** (変更の保存) をクリックします。

------
#### [ AWS CLI ]

**ヘルスチェックの設定を更新するには**  
[modify-target-group](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-target-group.html) コマンドを使用します。次の例では、**HealthyThresholdCount** と **HealthCheckTimeoutSeconds** の設定を更新します。

```
aws elbv2 modify-target-group \
    --target-group-arn target-group-arn \
    --healthy-threshold-count 3 \
    --health-check-timeout-seconds 20
```

------
#### [ CloudFormation ]

**ヘルスチェックの設定を更新するには**  
[AWS::ElasticLoadBalancingV2::TargetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-targetgroup.html) リソースを更新して、更新されたヘルスチェック設定を含めます。次の例では、**HealthyThresholdCount** と **HealthCheckTimeoutSeconds** の設定を更新します。

```
Resources:
  myTargetGroup:
    Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
    Properties:
      Name: my-target-group
      Protocol: HTTP
      Port: 80
      TargetType: instance
      VpcId: !Ref myVPC
      HealthyThresholdCount: 3
      HealthCheckTimeoutSeconds: 20
```

------