API Gateway で API HTTP 504 タイムアウトエラーをトラブルシューティングする方法を教えてください。

所要時間2分
0

Amazon API ゲートウェイを使用して REST API、HTTP API、またはウェブソケット API を呼び出すと、HTTP 504 エラーステータスコードを受け取ります。

簡単な説明

統合リクエストが API Gateway REST API の最大統合タイムアウトパラメータよりも時間がかかる場合、API Gateway は HTTP 504 ステータスコードを返します。

API Gateway からの 504 タイムアウトエラーのトラブルシューティングを行うには、まず Amazon CloudWatch 実行ログでエラーの原因を特定して検証します。次に、以下の方法の1つ以上を使用して、インテグレーションリクエストのランタイムをタイムアウトにならないまで減らします。

解像度

Amazon CloudWatch ログの 504 エラーの原因を特定して確認するには

1. Rest API Websocket API については](https://docs.aws.amazon.com/apigateway/latest/developerguide/websocket-api-logging.html) 、504 エラーの API[ゲートウェイ実行ロギングを設定します。HTTP API の場合は、ロギングを有効にして CloudWatch ログにログを書き込みます。

  1. API の 504 エラーを手動で再現してみます。

  2. API のアクセスログを有効にし 、次のパラメータ変数を使用してエラーの原因を診断します:

$context.integration.status: The status code returned from an integration. For AWS Lambda proxy integrations, this is the status code that your Lambda function code returns.
$context.integrationStatus: For Lambda proxy integration, this parameter represents the status code returned from Lambda, not from the backend Lambda function.
$context.integrationLatency: The integration latency in ms.

詳細については、データモデル、オーソライザー、マッピングテンプレート、および CloudWatch アクセスロギングの $context 変数を参照してください。

  1. 次の CloudWatch Log Insights クエリを使用して、アクセスログから「5XX」ステータスコードをフィルタリングします:
fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
  1. CloudWatch コンソールで、エラーを受け取ったインテグレーションの API Gateway 実行ログを表示します。

  2. CloudWatch ログでリクエスト ID を追跡してください。統合でタイムアウトが発生すると、「変換後のエンドポイントリクエスト本文:」行の後に「タイムアウトにより実行が失敗しました」というエラーが表示されます。詳細については、「CloudWatch ログで API ゲートウェイ REST API エラーを見つけるにはどうすればよいですか?」を参照してください。

  3. 次の CloudWatch ログインサイトクエリを使用してエラーをフィルタリングし、API Gateway 実行ロググループを選択します:

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc
  1. エラーの原因を特定するには、関連する統合エンドポイントが呼び出されたことを確認します。

  2. インテグレーションがリクエストの処理を完了し、API Gateway に応答するまでにかかった時間を確認します。

10. インテグレーションが呼び出されなかった場合は、クライアントに API リトライを実装します。(このエラーは、API Gateway サービスの一時的なネットワーク障害が原因である可能性があります。)

メモ:アプリケーションが等しいことを確認してください。これにより、API リクエストを再試行する際のデータ競合を回避できます。

-または-

インテグレーションが呼び出されたのに 504 エラーメッセージが返される場合は、インテグレーションの実行時間を短くしてみてください。HTTP API の場合は、統合リクエストの最大タイムアウトパラメータを増やしてみてください

**メモ:**API ゲートウェイ REST API のデフォルトの最大統合タイムアウトは 29 秒です。HTTP API の場合、タイムアウトは最大値の 30 秒に設定できます。最大値の制限を増やすことはできません。

インテグレーションの実行時間を短縮するには

  • バックエンド統合には、API Gateway が HTTP レスポンスをクライアントに送信するために必要なロジックのみが含まれていることを確認してください。非依存ロジックや後処理ロジックは、 Lambda などの別のサービスに移行することを検討してください。
  • ネットワーク遅延が 504 エラーの原因となっている場合は、クライアント側アプリケーションに再試行ロジックを実装します。
  • プラットフォームの最適化のベストプラクティスに従うことで、バックエンド統合のパフォーマンスを向上させます。
  • バックエンド Lambda 関数の非同期呼び出しを設定することを検討してください

関連情報

REST API インテグレーションのセットアップ

API ゲートウェイでの WebSocket API インテグレーションリクエストの設定

HTTP API のインテグレーションの設定

Amazon API ゲートウェイのクォータと重要な注意事項

コメントはありません

関連するコンテンツ