Lambda バックエンドでの API Gateway REST API からの HTTP 504 エラーのトラブルシューティング方法を教えてください。

所要時間2分
0

AWS Lambda バックエンドで Amazon API Gateway を使用して REST API を呼び出すと、HTTP 504 エラーステータスコードが表示されます。このエラーの解決方法を教えてください。

解決方法

REST API リクエストが HTTP 504 エラーステータスコードを返す場合、さまざまなチェックを実行する必要があります。

IntegrationLatency のスパイクのチェック

IntegrationLatency の応答時間を確認して、API Gateway にインテグレーションレイテンシーのスパイクがないかをチェックしてください。IntegrationLatency の応答時間を確認するには、HTTP API ログ記録のためのアクセスログ変数 $context.integration.latency を設定します。

詳細については、Set up Amazon CloudWatch API logging using the API Gateway console (API Gateway コンソールを使用して CloudWatch API ログ記録を設定する) を参照してください。

API Gateway の IntegrationLatency のスパイクは、Lambda でそのリクエストがほとんどの時間を費やしたことを示しています。これを確認するには、Lambda 関数の Duration パフォーマンスメトリックスをチェックしてください。

詳細については、「Lambda 関数のメトリクスの使用」を参照してください。

CloudWatch Logs Insights によるリクエストの確認

Amazon CloudWatch Logs Insights を使用して、504 エラーが発生したリクエストを確認してください。リクエストを確認するには、 CloudWatch コンソールのナビゲーションペインで、[Log] (ログ) 、[Log Insights] を順に選択します。API Gateway ロググループを選択します。次に、次のクエリのいずれかを使用して相対時間を設定します。

parse @message '(*) *' as reqId, message
| filter message like /Method completed with status: \d\d\d/
| parse message 'Method completed with status: *' as status
| filter status = 504
| sort @timestamp desc
| limit 20
  • または -
fields @timestamp, @message
| filter message like /Method completed with status: 504/
| sort @timestamp desc
| limit 20

X 線トレースの設定

504 エラーが継続的に発生する場合は、Lambda 関数がどこで時間を費やしているかを特定します。Lambda 関数ランタイムに基づいて Lambda 関数の AWS X-Ray トレースを設定します。

Python の場合:

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
patch_all()

Node.js の場合:

const AWSXRay = require('aws-xray-sdk-core')
const AWS = AWSXRay.captureAWS(require('aws-sdk'))

**注:**Lambda 関数で X-Ray トレースを設定した後に、新しいデプロイパッケージをビルドする必要があります。

API リトライの実装

504 エラーが発生したが、そのリクエストが Lambda で見つからない場合は、クライアント側で API の再試行を実装します。このエラーは、API Gateway での一時的なネットワーク障害が原因で発生した可能性があります。

Lambda 関数設定の確認

Lambda 関数が API Gateway イベント固有の処理ロジックのみで構成してください。これにより、Lambda 関数の実行時間が短縮され、受信イベントに応答できるようになります。

REST API のデフォルトの最大統合のタイムアウトは 29 秒です。そのため、Lambda 関数の実行時間が 29 秒未満であることを確認してください。

アプリケーションが時間的制限を受けるユースケースがある場合は、「バックエンド Lambda 関数の非同期呼び出しをセットアップする」を参照してください。


関連情報

API Gateway のディメンションとメトリクス

API Gateway での CloudWatch による REST API のログ記録の設定

CloudWatch コンソールで API Gateway のログイベントを表示する

X-Ray を使用して REST API に対するユーザーリクエストをトレースする

X-Ray でLambda を使用する

コメントはありません

関連するコンテンツ