Application Load Balancer のトラブルシューティング - Elastic Load Balancing

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

Application Load Balancer のトラブルシューティング

以下の情報は、Application Load Balancer の問題のトラブルシューティングに役立ちます。

登録されたターゲットが実行中でない

ターゲットが InService 状態になるまでに予想以上に時間がかかっている場合、ヘルスチェックに合格していない可能性があります。ターゲットは、ヘルスチェックに合格するまで実行されません。詳細については、「ターゲットグループのヘルスチェック」を参照してください。

インスタンスがヘルスチェックに合格していないことを確認したら、以下の点を確認します。

セキュリティグループでトラフィックが許可されていない

インスタンスに関連付けられたセキュリティグループでは、ヘルスチェックポートとヘルスチェックプロトコルを使用してロードバランサーからのトラフィックを許可する必要があります。インスタンスセキュリティグループにルールを追加して、ロードバランサーセキュリティグループからのすべてのトラフィックを許可できます。また、ロードバランサーのセキュリティグループは、インスタンスへのトラフィックを許可する必要があります。

ネットワークアクセスコントロールリスト (ACL) ではトラフィックが許可されない

インスタンスのサブネットに関連付けられたネットワーク ACL では、ヘルスチェックポートでインバウンドトラフィックを許可し、一時ポート (1024-65535) でアウトバウンドトラフィックを許可する必要があります。ロードバランサーノードのサブネットに関連付けられたネットワーク ACL では、一時ポートでインバウンドトラフィックを許可し、ヘルスチェックおよび一時ポートでアウトバウンドトラフィックを許可する必要があります。

ping パスが存在しない

ヘルスチェックのターゲットページを作成し、そのパスを ping パスとして指定します。

接続がタイムアウトする

最初に、ターゲットのプライベート IP アドレスとヘルスチェックプロトコルを使用して、ネットワーク内から直接ターゲットに接続できることを確認します。接続できない場合は、インスタンスの使用率が高すぎないかどうかを確認し、ビジー状態で応答できない場合はさらにターゲットをターゲットグループに追加します。接続できる場合、ヘルスチェックのタイムアウト時間の前に、ターゲットページが応答していない可能性があります。ヘルスチェック用のよりシンプルなターゲットページを選択するか、ヘルスチェックの設定を調整します。

ターゲットが正常なレスポンスコードを返さなかった

デフォルトの成功コードは 200 ですが、ヘルスチェックを設定するときにオプションで成功コードを追加して指定できます。ロードバランサーで予期される成功コードを確認し、成功時にアプリケーションがそれらのコードを返すよう設定されていることを確認します。

ターゲットレスポンスコードの形式が正しくないか、ターゲットへの接続中にエラーが発生しました

アプリケーションがロードバランサーの正常性チェックリクエストに応答することを確認します。一部のアプリケーションでは、正常性チェックに応答するために追加の設定が必要です。例えば、ロードバランサーから送信された HTTP ホストヘッダーに応答するための仮想ホスト設定などです。ホストヘッダー値には、ターゲットのプライベート IP アドレスが含まれ、その後に正常性チェックポートが続きます。例えば、ターゲットのプライベート IP アドレスが 10.0.0.10 で、正常性チェックポートが 8080 の場合、正常性チェックでロードバランサーから送信される HTTP Host ヘッダーは Host: 10.0.0.10:8080 です。アプリケーションの正常性チェックを正常に実行するには、そのホストに応答する仮想ホスト設定、またはデフォルト設定が必要になる場合があります。正常性チェックリクエストは、次の属性を有しています。すなわち、User-AgentELB-HealthChecker/2.0 に設定され、メッセージヘッダーフィールドの行終端記号はシーケンス CRLF、ヘッダーは最初の空の行で終了し、その後に CRLF が続きます。

クライアントがインターネット向けロードバランサーに接続できない

ロードバランサーがリクエストに応答しない場合は、以下の点を確認します。

インターネット向けロードバランサーがプライベートサブネットにアタッチされている

ロードバランサーのパブリックサブネットを指定する必要があります。パブリックサブネットには Virtual Private Cloud (VPC) のインターネットゲートウェイへのルートがあります。

セキュリティグループまたはネットワーク ACL でトラフィックが許可されていない

ロードバランサーのセキュリティグループ、およびロードバランサーサブネットのネットワーク ACL で、クライアントからのインバウンドトラフィックとクライアントへのアウトバウンドトラフィックをリスナーポートで許可する必要があります。

ロードバランサーが異常なターゲットにリクエストを送信する

ターゲットグループに少なくとも 1 つの正常なターゲットがある場合、ロードバランサーはその正常なターゲットにのみリクエストをルーティングします。ターゲットグループに異常なターゲットのみが含まれている場合、ロードバランサーはその異常なターゲット間でリクエストをルーティングします。

ロードバランサーは、レスポンスコード 000 を送信します。

HTTP/2 接続では、いずれかのヘッダーの圧縮された長さが 8K バイトを超える場合、または 1 つの接続を介して処理されるリクエスト数が 10,000 を超える場合、ロードバランサーは GOAWAY フレームを送信し、TCP FIN を使用して接続を閉じます。

ロードバランサーが HTTP エラーを生成する

次の HTTP エラーは、ロードバランサーで生成されます。ロードバランサーはクライアントに HTTP コードを送信し、アクセスログにリクエストを保存して、HTTPCode_ELB_4XX_Count または HTTPCode_ELB_5XX_Count メトリクスを増やします。

HTTP 400: Bad request

考えられる原因:

  • クライアントが HTTP 仕様を満たさない誤った形式のリクエストを送信した。

  • リクエストヘッダーが、リクエスト行あたり 16K、1 つのヘッダーあたり 16K、またはヘッダー全体に対して 64K を超えている。

HTTP 401: Unauthorized

ユーザーを認証するようリスナールールを設定しましたが、以下のいずれかが該当しません。

  • OnUnauthenticatedRequest が認証されていないユーザーを拒否するように設定されているか、IdP によってアクセスが拒否されました。

  • IdP によって返されるクレームのサイズが、ロードバランサーによってサポートされる最大サイズを超えています。

  • クライアントがホストヘッダーなしで HTTP/1.0 リクエストを送信し、ロードバランサーはリダイレクト URL を生成できませんでした。

  • リクエストされたスコープで ID トークンが返さません。

HTTP 403: Forbidden

Application Load Balancer へのリクエストをモニタリングするよう AWS WAF ウェブアクセスコントロールリスト (ウェブ ACL) を設定し、リクエストがブロックされました。

HTTP 405: Method not allowed

クライアントが、Application Load Balancer でサポートされていない TRACE メソッドを使用しました。

HTTP 408: Request timeout

アイドルタイムアウト期間の期限が切れる前に、クライアントからデータが送信されませんでした。TCP キープアライブを送信しても、このタイムアウトを防ぐことはできません。各アイドルタイムアウト期間が経過する前に、1 バイト以上のデータを送信します。必要に応じて、アイドルタイムアウト期間を長くします。

HTTP 413: Payload too large

ターゲットは Lambda 関数で、リクエストボディが 1 MB を超えています。

HTTP 414: URI too long

リクエストの URL またはクエリ文字列パラメータが大きすぎます。

HTTP 460

ロードバランサーはクライアントからリクエストを受信したが、クライアントはアイドルタイムアウトが経過する前に、ロードバランサーとの接続を閉じました。

クライアントのタイムアウト期間がロードバランサーのアイドルタイムアウト期間より長いかどうか確認してください。クライアントのタイムアウト期間が経過する前に、ターゲットがクライアントにレスポンスを返すことを確認するか、クライアントがサポートする場合は、クライアントのタイムアウト期間を増やしてロードバランサーのアイドルタイムアウトに合わせます。

HTTP 463

多すぎる IP アドレスを含む X-Forwarded-For リクエストヘッダーがロードバランサーに送信されました。IP アドレスの上限は 30 です。

HTTP 464

ロードバランサーは、ターゲットグループプロトコルのバージョン構成と互換性のない着信リクエストプロトコルを受信しました。

考えられる原因:

  • リクエストプロトコルは HTTP/1.1 であるが、ターゲットグループのプロトコルバージョンが gRPC または HTTP/2 である。

  • リクエストプロトコルは gRPC であるが、ターゲットグループのプロトコルバージョンが HTTP/1.1 である。

  • リクエストプロトコルは HTTP/2 であり、リクエストは POST ではないが、ターゲットグループのプロトコルバージョンが gRPC である。

HTTP 500: Internal server error

考えられる原因:

  • AWS WAF のウェブアクセスコントロールリスト (ウェブ ACL) を設定し、ウェブ ACL ルールの実行でエラーが発生しました。

  • ロードバランサーは、IdP トークンのエンドポイントまたは IdP ユーザー情報エンドポイントと通信できません。ロードバランサーのセキュリティグループおよび VPC のネットワーク ACL がこれらのエンドポイントに対するアウトバウンドアクセスを許可していることを検証します。VPC がインターネット接続されていることを確認します。内部向けロードバランサーがある場合は、NAT ゲートウェイを使用してインターネットアクセスを有効にします。

HTTP 501: Not implemented

サポートされていない値を含む Transfer-Encoding ヘッダーがロードバランサーに送信されました。Transfer-Encoding のサポートされていない値は、chunkedidentity です。代わりに、Content-Encoding ヘッダーを使用することができます。

HTTP 502: Bad gateway

考えられる原因:

  • 接続の確立を試みているときに、ロードバランサーがターゲットから TCP RST を受信した。

  • 接続の確立を試みているときに、ロードバランサーがターゲットから予期しないレスポンスを受信した (例: 「ICMP Destination unreachable (Host unreachable) (ICMP 送信先に到達できません (ホストに到達できません))」など)。ターゲットポートでロードバランサーサブネットからターゲットへのトラフィックが許可されているかどうかを確認します。

  • ロードバランサーにターゲットへの未処理のリクエストがあるときに、ターゲットが TCP RST または TCP FIN との接続を閉じた。ターゲットのキープアライブ期間がロードバランサーのアイドルタイムアウト値よりも短いことを確認します。

  • ターゲットのレスポンス形式が正しくないか、有効でない HTTP ヘッダーが含まれている。

  • ロードバランサーがターゲットに接続するときに、SSL ハンドシェイクエラーまたは SSL ハンドシェイクタイムアウト (10 秒) が発生しました。

  • 登録解除されたターゲットによって処理されていたリクエストで登録解除の遅延期間が経過しました。時間のかかるオペレーションが完了できるように、遅延期間を増やします。

  • ターゲットは Lambda 関数で、レスポンスボディが 1 MB を超えています。

  • ターゲットは、設定されたタイムアウトに達する前に応答しなかった Lambda 関数です。

HTTP 503: Service unavailable

ロードバランサーのターゲットグループに登録済みターゲットがありません。

HTTP 504: Gateway timeout

考えられる原因:

  • ロードバランサーは、接続タイムアウトが期限切れになる (10 秒) 前にターゲットへの接続の確立に失敗した。

  • ロードバランサーはターゲットへの接続を確立したが、アイドルタイムアウト期間が経過する前にターゲットが応答しなかった。

  • サブネットのネットワーク ACL で、ターゲットから一時ポート (1024-65535) のロードバランサーノードへのトラフィックが許可されなかった。

  • ターゲットがエンティティ本文より大きな Content-Length ヘッダーを返した。ロードバランサーが欠落しているバイトを待機してタイムアウトした。

  • ターゲットは Lambda 関数であり、接続タイムアウトが期限切れになる前に Lambda サービスが応答しませんでした。

HTTP 505: バージョンはサポートされていません

ロードバランサーが予期しない HTTP バージョンリクエストを受信しました。例えば、ロードバランサーが HTTP/1 接続を確立したが、HTTP/2 リクエストを受信したとします。

HTTP 561: Unauthorized

リスナールールがユーザーを認証するように設定されていますが、IdP がユーザーの認証時にエラーコードを返しました。

ターゲットが HTTP エラーを生成する

ロードバランサーはターゲットからの有効な HTTP レスポンスを、HTTP エラーを含めてクライアントに転送します。ターゲットによって生成された HTTP エラーは、HTTPCode_Target_4XX_Count および HTTPCode_Target_5XX_Count メトリクスに記録されます。