Amazon API Gateway の使用時、REST API、HTTP API、WebSocket API を呼び出すと HTTP 504 エラーステータスコードが発生します。
簡単な説明
統合リクエストが API Gateway REST API の最大統合タイムアウトパラメータよりも長くかかる場合、API Gateway は HTTP 504 ステータスコードを返します。
API Gateway からの 504 タイムアウトエラーをトラブルシューティングするには、まず Amazon CloudWatch イベントログでエラーの原因を特定して検証します。次に、以下の方法のうち 1 つまたは複数を使用して、インテグレーションリクエストのランタイムをタイムアウトにならないまで減らします。
解決策
CloudWatch ログの 504 エラーの原因を特定して確認する
次の手順を実行します。
-
Rest API と Websocket API では、504 エラーに対する API Gateway のログ記録を設定します。HTTP API の場合は、ログ記録を有効にして CloudWatch ログにログを書き込みます。
-
API の 504 エラーを手動で再現してみます。
-
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 変数」を参照してください。
-
アクセスログから "5XX" ステータスコードをフィルター処理するために、次の CloudWatch Log Insights クエリを使用します。
fields @timestamp, @message, @logStream
| filter status like '5'
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
-
CloudWatch コンソールで、エラーが発生した統合について API Gateway ログイベントを確認します。
-
CloudWatch ログでリクエスト ID を追跡します。統合でタイムアウトが発生している場合、「変換後のエンドポイントリクエスト本文:」行の後に「タイムアウトにより実行が失敗しました」というエラーが表示されます。詳細については、「CloudWatch ログで API ゲートウェイ REST API エラーを特定する方法を教えてください」を参照してください。
-
エラーをフィルター処理し、API Gateway 実行ロググループを選択するには、次の CloudWatch Log Insights クエリを使用します。
fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc
-
エラーの原因を特定するには、バックエンドログを確認して、関連する統合エンドポイントが呼び出されたことを確認します。
-
統合がリクエスト処理を完了し、API Gateway に応答するまでにかかった時間を確認します。
-
統合が呼び出されなかった場合は、クライアントに API リトライを実装します。このエラーは、API Gateway サービスの一時的なネットワーク障害が原因である可能性があります。
注: API リクエストを再試行するときにデータの競合を避けるために、アプリケーションがべき等であることを確認してください。
または、
統合が呼び出されたにもかかわらず、504 エラーメッセージが表示される場合は、統合の実行時間を短縮してみてください。HTTP API の場合は、統合リクエストの最大タイムアウトパラメータを増加させます。詳細については、「Amazon API Gateway 統合のタイムアウト制限を 29 秒よりも長くする」を参照してください。
注: API Gateway REST API のデフォルトの最大統合タイムアウトは 29 秒です。HTTP API の場合、タイムアウトは最大値の 30 秒に設定できます。
統合の実行時間を短縮する方法
以下の 1 つまたは複数のアクションを実行します。
- バックエンド統合には、API Gateway が HTTP レスポンスをクライアントに送信するために必要なロジックのみが含まれている必要があります。
- 非依存ロジックやポストプロセスロジックは、AWS Lambda などの別のサービスに移動します。
- ネットワーク遅延が 504 エラーの原因となっている場合は、クライアント側アプリケーションに再試行ロジックを実装します。
- AWS 製品とサービスのベストプラクティスに従って、バックエンド統合のパフォーマンスを向上させます。
- バックエンド Lambda 関数の非同期呼び出しを設定します。
関連情報
API Gateway での REST API の統合
API Gateway で WebSocket API 統合リクエストを設定する
API Gateway で HTTP API の統合を作成する
Amazon API Gateway のクォータと重要な注意事項