仮想プライベートクラウド (VPC) リンク統合を使用して Amazon API Gateway を設定しました。API を呼び出すと、ステータスコード HTTP 500 を含む設定エラーまたは内部エラーが発生します。
簡単な説明
VPC リンクを使用する AWS API Gateway は、以下の理由により、トラフィックをバックエンドリソースに転送できず、ステータスコード HTTP 500 を返すことがあります。
- VPC リンクは障害状態です。または、エンドポイントサービスが削除されているか、拒否状態になっています。
- ターゲットグループに登録されているターゲットが正常でないか、使用されていません。
注: VPC リンク経由で 60 日間トラフィックが送信されない場合、リンクは非アクティブになります。詳細については、「HTTP API の VPC リンクの使用」を参照してください。
- セキュリティグループが特定のポートでのトラフィックを許可していません。
- ネットワークアクセスコントロールリスト (ネットワーク ACL) がトラフィックをブロックしています。
- ターゲットがターゲットポートでリッスンしていません。
- ドメイン名証明書が TLS で有効化された Network Load Balancer または Application Load Balancer と一致していません。
Amazon CloudWatch Logs が API で有効になっている場合、エラーの原因を示すエラーメッセージが実行ログに表示されます。
CloudWatch ログ内の HTTP 500 関連エラーメッセージの例
「Thu Aug 04 17:48:21 UTC 2022 : Execution failed due to configuration error: There was an internal error while executing your request Thu Aug 04 17:48:21 UTC 2022 : Method completed with status: 500」
または
「Thu Aug 04 19:50:21 UTC 2022 : Execution failed due to configuration error: Host name 'domain.com.com' does not match the certificate subject provided by the peer (CN=myinstance.com)
Thu Aug 04 19:50:21 UTC 2022 : Method completed with status: 500」
解決策
エラーの原因を確認する
CloudWatch のログ記録を有効にします。実行ログの設定を必ず行ってください。
注: ログを設定するときに、[ログレベル] で [情報] を選択します。次に、[リクエスト/レスポンスをすべてログ] を選択します。
エラーの原因を特定するには、CloudWatch の REST API 実行ログを確認してください 。
実行ログでエラーメッセージがないか確認する
Error: Execution failed due to configuration error: There was an internal error while executing your request
次に、以下の設定を確認します。
- VPC リンクロードバランサーが存在し、削除されていないことを確認します。
- VPC リンクが使用可能な状態であることを確認します。VPC リンクが失敗状態の場合は、新しい VPC リンクを作成して API に関連付ける必要があります。
注: 統合リクエストを変更した後に API をデプロイします。
- VPC リンクエンドポイント接続が AVAILABLE 状態であることを確認します。
- VPC ID がステージ変数で参照されている場合は、VPC リンク ID が正しいことを確認してください。
- VPC リンクロードバランサーが、リクエストが設定されている HTTP/HTTPS ポートでリッスンしていることを確認します。リスナーが正しいポート用に設定されていることを確認してください。ネットワーク ACL がリクエストをブロックしていないことを確認します。
- ターゲットグループがリクエストを受け入れていることを確認します。ネットワーク ACL はインバウンドトラフィックとアウトバウンドトラフィックを許可する必要があります。また、セキュリティグループは設定されたポートのインバウンドトラフィックを許可する必要があります。
- リクエストがエラー 500 関連のエラーを返した場合、接続は TCP RST パケットを受信する可能性があります。バックエンドサーバーが稼働していることを確認します。ターゲットポートのバックエンドターゲットでサービスが実行されていることを確認します。バックエンドターゲットがターゲットポートでリッスンしていることを確認します。
- [AWS PrivateLink トラフィックにインバウンドルールを適用する] がオフになっていることを確認します。[AWS PrivateLink トラフィックにインバウンドルールを適用する] をオンにした場合は、すべてのインバウンドとアウトバウンドのセキュリティグループルールが VPC リンクからのトラフィックに適用されます。VPC リンクからのトラフィックを許可するようにセキュリティグループを設定しない場合でも、セキュリティグループは API Gateway トラフィックをブロックできます。VPC リンク以外のトラフィックにもセキュリティグループルールを適用するには、[AWS PrivateLink トラフィックにインバウンドルールを適用する] をオフにします。
Error: Execution failed due to configuration error: Host name 'domain.com.com' does not match the certificate subject provided by the peer (CN=myinstance.com)
エンドポイントのドメイン名が、TLS で有効化されたロードバランサーターゲットが返す証明書と一致することを確認してください。
Error: Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
このエラーは、API Gateway がルート認証機関を見つけることができない場合に発生します。統合の TLSConfig プロパティで InSecureSkipVerification が true に設定されている場合でも、API Gateway は証明書の基本的な検証を実行します。検証では以下の情報を確認します。
ターゲットインスタンスで設定する証明書は、サポートされている認証機関プロバイダーリストにあるプロバイダーからの証明書であることにより、信頼できるものである必要があります。
Error: Execution failed due to configuration error: Cannot verify ECDH ServerKeyExchange signature
このエラーは、キーおよび対応する証明書が一致せず、TLS ハンドシェイクが失敗した場合に発生します。この問題を解決するには、設定した認証機関、証明書、およびキーに使用したファイルの内容を確認します。
Error: Execution failed due to an internal error
このエラーは、ターゲットがロードバランサー上でリセットされたため、Amazon API Gateway が VPC リンクを介してロードバランサーに接続できなかった場合に発生します。この問題を解決するには、ロードバランサーのデフォルトのタイムアウト (350 秒) よりも長いタイムアウトをターゲットのタイムアウトに設定します。
Error: Execution failed due to configuration error: Not a valid protocol version: {Text of string}
このエラーは、統合が、HTTP 仕様に準拠していない無効な HTTP 応答で応答した場合に発生します。これは、統合されたバックエンドが無効なデータを Amazon API Gateway に送り返していることを意味している可能性があります。
このエラーをトラブルシューティングするには、次のアクションを実行してください。
- Amazon API ゲートウェイから行ったリクエストを再現します。Amazon API Gateway が使用するサービスエンドポイントをテストするには、サービスエンドポイント ID にリンクされた VPC エンドポイントを作成します。パケットキャプチャを実行して、統合バックエンドから返された応答を確認することもできます。
- 重複暗号化を避けるために、ターゲットの応答に応じて、ロードバランサーのプロトコルを TLS または TCP に変更します。
- 統合の TlsConfig プロパティで insecureSkipVerification が true に設定されていることを確認してください。
関連情報
Amazon API Gateway プライベート統合の VPC リンクについて
Amazon CloudWatch のメトリクスを使用した REST API の実行のモニタリング
API Gateway のプライベート統合の Network Load Balancer を設定する