API Gateway + Lambda のタイムアウト設定
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構成ではなく、別のアーキテクチャを検討します。