API Gateway + Lambda のタイムアウト設定
Contents
API GatewayからLambdaを同期呼び出しする時の注意事項
- 今回は、API Gateway + Lambda構成において、API GatewayがLambdaを同期呼び出しする時にはまった落とし穴をご紹介します。
- クライアントからのリクエストに対して、API Gatewayから504エラーが返されました。504はGateway Time-out を表します。今回の構成では、API Gateway、Lambda両方のタイムアウト値に注意する必要があります。
Lambdaのタイムアウト値
- Lambda関数のタイムアウト値は、1秒~15分の間で指定可です。この制限は緩和できません。
![](https://oji-cloud.net/wp-content/uploads/2019/07/2019-06-28_18h30_21-725x456.png)
API Gatewayのタイムアウト値
- API Gatewayのタイムアウト値は、50ms~29秒の間で指定可です。この制限は緩和できません。
![](https://oji-cloud.net/wp-content/uploads/2019/07/2019-07-02_00h43_31-725x322.png)
![](https://oji-cloud.net/wp-content/uploads/2019/07/2019-07-02_00h43_56-725x322.png)
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構成ではなく、別のアーキテクチャを検討します。
![](https://oji-cloud.net/wp-content/uploads/2019/07/2019-09-05_18h37_19-725x133.png)