Amazon API Gatewayのタイムアウト設定は最大29秒まで

公開日時
更新日時

Amazon API Gateway + Lambdaを使ってREST APIを作成した際に、Lambdaで重い処理を行っていた都合で、まれに Endpoint request timed out エラーが発生することがあった。

Lambdaのタイムアウト時間は60秒にしており、CloudWatch Logsを確認すると60秒以内に処理が終わっていたものの、APIのレスポンスはエラーになっていた。

そういえばと思いAPI Gatewayのタイムアウト仕様を確認してみたところ、API Gatewayのタイムアウトは最大29秒(デフォルト)までの制限があり、上限緩和もできないとのことだった。

api-gateway-timeout

リソースまたはオペレーション: 統合のタイムアウト

デフォルトのクォータ: Lambda、Lambda プロキシ、HTTP、HTTP プロキシ、AWS 統合など、すべての統合タイプで 50 ミリ秒〜29 秒。

引き上げ可能: 下限または上限には適用外

29秒以上かかる場合は、API Gateway自体は即レスポンスを返すようにして非同期でLambdaを呼び出すようにするのが正しい方法だが、今回はLambdaの処理自体を見直すことで改善できそうだったので、Lambda側で29秒以内にレスポンスを返せるように修正した。


Related #lambda

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

Nodejs12のLambdaでawscliを使う

aws-lambda-layer-awscliを使う

s3の署名付きURLが有効期限より前に見れなくなってしまう

IAMロールではなくIAMユーザの権限でURLを生成する必要があった

AWS Lambdaでpuppeteerを動かしスクリーンショットをs3に保存する

前から気になっていたHeadless Chromeをjsから操作できるpuppeteerを使って、スクリーンショットをs3に保存するAPIを作ることにした。

CDK aws-lambda-nodejsのビルド時間を短縮する

Parcel v2.0.0-beta.1を使ってローカルでバンドルする