API Gateway + Lambda のタイムアウト設定

2019-09-08

API GatewayからLambdaを同期呼び出しする時の注意事項

  • 今回は、API Gateway + Lambda構成において、API GatewayがLambdaを同期呼び出しする時にはまった落とし穴をご紹介します。
  • クライアントからのリクエストに対して、API Gatewayから504エラーが返されました。504はGateway Time-out を表します。今回の構成では、API Gateway、Lambda両方のタイムアウト値に注意する必要があります。

Lambdaのタイムアウト値

  • Lambda関数のタイムアウト値は、1秒~15分の間で指定可です。この制限は緩和できません。
 

API Gatewayのタイムアウト値

  • API Gatewayのタイムアウト値は、50ms~29秒の間で指定可です。この制限は緩和できません。
   

504 /502 エラーを回避する

  • Lambda の実行中に API Gateway がタイムアウトした場合には 504 のGateway Time-outが返却されます。
  • Lambda のタイムアウト値を API Gateway のタイムアウト値より短く設定し、かつLambda関数の実行がタイムアウト値以内に終了しない場合、Lambda関数の実行は停止しレスポンスがAPI Gatewayに渡されません。この場合、API Gatewayからクライアントに対して、502のBad Gatewayが返却されます。
  • 上記502のエラーの場合、Lambda から “Task timed out after” の文字列を含むログが出力されます(後述の画像を参照)。メソッドレスポンスマッピングを使用してカスタムエラーをクライアントへ返却することができるので、クライアントがリトライできる場合は、リトライで回避することも方法の1つです。
  • クライアントがリトライできない場合は、API Gateway + Lambda構成ではなく、別のアーキテクチャを検討します。