Application Load Balancer に登録されているターゲットが正常ではありません。ターゲットがヘルスチェックが失敗する理由を調べる方法を教えてください。
解決策
Application Load Balancer のヘルスチェックの失敗をトラブルシューティングして修正するには:
- ターゲットの状態をチェックして、問題の理由コードと説明を探します。
- エラーが表示されたら、以下の解決策に従ってください。
Elb.InitialHealthChecking
説明: 初期ヘルスチェックが進行中です。
解決策: ターゲットがロードバランサーからリクエストを受信するには、そのターゲットは初期ヘルスチェックに合格しておく必要があります。ターゲットが初期ヘルスチェックに合格するまで待ってから、ヘルスステータスを再確認してください。
Elb.RegistrationInProgress
説明: ターゲットの登録が進行中です。
解決策: 登録プロセスが完了して、ターゲットが初期ヘルスチェックに合格すると、ロードバランサーはターゲットへのリクエストのルーティングがすぐに開始します。
Target.DeregistrationInProgress
説明: ターゲットの登録解除が進行中です。
解決策: ターゲットを登録解除するとき、ロードバランサーは実行中のリクエストが完了するまで待機します。これは登録解除遅延と呼ばれます。デフォルトでは、Elastic Load Balancing は登録解除プロセスを完了する前に 300 秒間待機します。ただし、この値はカスタマイズできます。
登録解除中のターゲットに実行中のリクエストもアクティブな接続もない場合、Elastic Load Balancing は登録解除遅延の経過を待たずにすぐに登録を解除します。登録解除中のターゲットの初期状態はドレインです。登録解除の遅延が経過すると、登録解除プロセスが完了し、ターゲットの状態は未使用になります。ターゲットが Auto Scaling グループの一部である場合は、終了して置き換えることができます。
Target.FailedHealthChecks
説明: ロードバランサーがターゲットへの接続を確立中にエラーを受け取ったか、ターゲット応答の形式が正しくありませんでした。
解決策:
- アプリケーションが実行中であることを確認します。service コマンドで、Linux ターゲット上のサービスの状態を確認します。Windows ターゲットの場合は、Windows タスクマネージャーの [サービス] タブを確認してください。サービスが停止している場合は、サービスを開始してください。サービスが認識されない場合は、必要なサービスがインストールされていることを確認してください。
- ターゲットがヘルスチェックポートでトラフィックをリッスンしていることを確認します。サーバーがリッスンしているポートは、Linux ターゲットで ss コマンドで確認できます。Windows ターゲットの場合は、netstat コマンドを使用できます。
- アプリケーションがロードバランサーのヘルスチェックリクエストに適切に応答することを確認します。次の例は、ターゲットが有効な HTTP レスポンスで返す必要がある、Application Load Balancer からの一般的なヘルスチェックリクエストを示しています。Host ヘッダー値には、ターゲットのプライベート IP アドレスとそれに続くヘルスチェックポートが含まれます。ユーザーエージェントは ELB-HealthChecker/2.0 に設定されています。メッセージヘッダーフィールドの行末記号は CRLF シーケンスです。ヘッダーは最初の空行で終了し、その後に CRLF が続きます。必要に応じて、ヘルスチェックリクエストを受信するデフォルトの仮想ホストをウェブサーバー設定に追加します。
GET / HTTP/1.1
Host: 10.0.0.1:80
Connection: close
User-Agent: ELB-HealthChecker/2.0
Accept-Encoding: gzip, compressed
- ターゲットグループのターゲットタイプによって、ロードバランサーがターゲットのヘルスチェックの送信先のネットワークインターフェイスが決まります。たとえば、インスタンス ID、IP アドレス、Lambda 関数を登録できます。ターゲットタイプがインスタンス ID の場合、ロードバランサーはターゲットのプライマリネットワークインターフェイスにヘルスチェックリクエストを送信します。ターゲットタイプが IP アドレスの場合、ロードバランサーは対応する IP アドレスに関連付けられたネットワークインターフェイスにヘルスチェックリクエストを送信します。ターゲットに複数のインターフェースが関連付けられている場合は、アプリケーションが正しいネットワークインターフェースでリッスンしていることを確認してください。
- ELBSecurityPolicy-2016-08 セキュリティポリシーは、ターゲット接続と HTTPS ヘルスチェックに使用されます。セキュリティポリシーで指定された形式のサーバー証明書とキーがターゲットから提供されていることを確認してください。また、TLS ハンドシェイクを確立するためにロードバランサーが提供する 1 つ以上の一致する暗号とプロトコルがターゲットでサポートされていることも確認してください。
Target.InvalidState
説明: ターゲットが停止状態か、終了状態です。
解決策: ターゲットが Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの場合は、Amazon EC2 コンソールを開きます。次に、インスタンスが実行中であることを確認します。必要に応じてインスタンスを起動します。
Target.IpUnusable
説明: IP アドレスがロードバランサーによって使用されているため、ターゲットとして使用できません。
解決策: ターゲットグループを作成するときは、そのターゲットタイプを指定します。ターゲットタイプが IP の場合は、ロードバランサーですでに使用されている IP アドレスを選択しないでください。
Target.NotInUse
説明: ターゲットグループがどのロードバランサーにも使用されていないか、ターゲットがロードバランサーで有効になっていないアベイラビリティーゾーンにあります。
解決策:
- ターゲットグループをチェックして、ロードバランサーからトラフィックを受信する設定になっていることを確認します。
- ターゲットのアベイラビリティーゾーンがロードバランサーで有効になっていることを確認します。
Target.NotRegistered
説明: ターゲットがターゲットグループに登録されていません。
解決策: ターゲットがターゲットグループに登録されていることを確認します。
Target.ResponseCodeMismatch
説明: 期待していた HTTP コードが、ヘルスチェックで返されませんでした。
解決策:
- 成功コードは、ターゲットからの正常な応答を確認するときに使用する HTTP コードです。200 から 499 までの値または値の範囲を指定できます。デフォルト値は 200 です。ロードバランサーのヘルスチェック設定をチェックして、受け取りが想定されている成功コードを確認してください。次に、Web サーバーのアクセスログを調べて、期待どおりの成功コードが返されているかどうかを確認します。必要に応じて成功コードの値を変更してください。
- ping パスが有効であることを確認します。ping パスは、ターゲット上のヘルスチェックの宛先です。必ず有効な URI (/path?query) を指定してください。デフォルトは / です。必要に応じて ping パス値を変更します。
Target.Timeout
説明: リクエストがタイムアウトしました。
解決策: 接続できる場合は、ターゲットページはヘルスチェックのタイムアウト期間までに応答しない可能性があります。NGINX や IIS などのほとんどの Web サーバーでは、サーバーが応答するまでにかかる時間を記録できます。ヘルスチェックリクエストが設定されたタイムアウトより長くかかる場合は、次のように対応できます:
接続できない場合:
関連情報
Application Load Balancer のトラブルシューティング