Application Load Balancer をトラブルシューティングし、ヘルスチェックの失敗を修正するにはどうすればよいですか?

最終更新日: 2022 年 1 月 6 日

Application Load Balancer に登録されたターゲットが正常ではありません。自分のターゲットがヘルスチェックに失敗する理由を確認するにはどうすればよいですか?

解決方法

Application Load Balancer をトラブルシューティングし、ヘルスチェックの失敗を修正するには:

1.    問題の理由コードと説明を見つけるために、ターゲットのヘルスをチェックします。 

2.    受け取ったエラーについて、以下の手順に従います。

Elb.InitialHealthChecking

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

解決策 : ターゲットがロードバランサーから要求を受信する前に、ターゲットが最初のヘルスチェックに合格する必要があります。ターゲットが最初のヘルスチェックに合格するのを待ってから、ヘルスステータスを再確認します。

Elb.RegistrationInProgress

説明: ターゲットの登録中です。

解決策: 登録プロセスが完了し、ターゲットが最初のヘルスチェックに合格したらすぐにロードバランサーはターゲットへのリクエストのルーティングを開始します。

Target.DeregistrationInProgress

説明: ターゲットの登録解除中です。

解決策: ターゲットを登録解除すると、ロードバランサーは未処理のリクエストが完了するまで待機します。これは、登録解除の遅延として知られています。デフォルトでは、Elastic Load Balancing は、登録解除プロセスを完了するまで 300 秒待ちます。ただし、この値をカスタマイズすることができます。

登録解除するターゲットに未処理のリクエストまたはアクティブな接続がない場合、Elastic Load Balancing は登録解除の遅延の経過を待たずに直ちに登録解除します。登録解除するターゲットの初期状態は、[draining] (ドレイ二ング) です。登録解除の遅延が経過すると、登録解除プロセスは完了し、ターゲットの状態は [unused] (未使用) になります。ターゲットが Auto Scaling グループの一部である場合、終了して置き換えることができます。

Target.FailedHealthChecks

説明: ロードバランサーはターゲットへの接続を確立中にエラーを受信した、またはターゲットの応答が不正でした。

解決方法:

  • アプリケーションが実行中であることを確認します。service コマンドを使用して、Linux ターゲットでサービスのステータスを確認します。Windows ターゲットの場合、 Windows タスクマネージャーの [Services] (サービス) タブを確認します。このサービスが停止している場合、サービスを開始します。サービスが認識されなかった場合は、必要なサービスがインストールされていることを確認します。
  • ターゲットがヘルスチェックポートでトラフィックをリッスンしていることを確認します。Linux ターゲットで ss コマンドを使用して、サーバーがリッスンしているポートを確認します。Windows のターゲットの場合、netstat コマンドを使用できます。
  • アプリケーションがロードバランサーのヘルスチェックリクエストに適宜応答することを確認します。以下の例は、ターゲットが有効な HTTP 応答を返す必要のある Application Load Balancer からの典型的なヘルスチェックリクエストを示しています。Host ヘッダー値には、ターゲットのプライベート IP アドレスと、それに続くヘルスチェックポートが含まれます。User-agent は 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

説明: ターゲットは停止または終了状態です。

解決策: ターゲットが EC2 インスタンスの場合、Amazon EC2 コンソールを開き、インスタンスが実行されていることを確認します。必要に応じてインスタンスを開始します。

Target.IpUnusable

説明 :ロードバランサーにより使用されているため、IP アドレスをターゲットとして使用することはできません。

解決策: ターゲットグループを作成するときは、そのターゲットタイプを指定します。ターゲットタイプが IP の場合、ロードバランサーにより既に使用されている IP アドレスを選択しないでください。

Target.NotInUse

説明 : ターゲットグループがロードバランサーにより使用されていないか、ターゲットがそのロードバランサーに対して有効ではないアベイラビリティゾーンにあります。

解決方法:

  • ターゲットグループを確認し、ロードバランサーからトラフィックを受け取るように設定されていることを確認します。
  • ターゲットのアベイラビリティゾーンがロードバランサーに対して有効であることを確認します。

Target.NotRegistered

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

解決策 : ターゲットがターゲットグループに登録されていることを確認します。

Target.ResponseCodeMismatch

説明 : ヘルスチェックで期待された HTTP コードが返されませんでした。

解決方法:

  • 成功コードはターゲットからの正常な応答を確認する時に使用する HTTP コードです。200~499 の値または値の範囲を指定できます。デフォルト値は 200 です。受信することが期待されている成功コードを確認するためにロードバランサーのヘルスチェックの設定を確認します。次に、ウェブサーバーのアクセスログが検査され、予想される成功コードが返されているかどうかを確認します。必要に応じて成功コード値を変更します
  • ping パスが有効であることを確認します。ping パスはヘルスチェックのターゲットの送信先で選択します。有効な URI を指定してください (/path?query)。デフォルトは / です。必要に応じて、ping パス値を変更します

Target.Timeout

説明: 要求がタイムアウトしました。

解決策: 接続できる場合、ターゲットページはヘルスチェックのタイムアウト時間の前に応答しない場合があります。NGINX や IIS などのほとんどのウェブサーバーでは、サーバーが応答する時間の長さを記録できます。ヘルスチェックリクエストが設定されたタイムアウトよりも時間がかかる場合、次のことができます。

接続できない場合:


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?