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

マネージメントコンソール上のエディタでLambdaのコードを書く際にnpmライブラリを追加したい

ローカルでライブラリをインストールしてからインポートする必要があった

AWS SESでメールを受信してGmailに転送する

独自ドメインメールの送受信ができるようになった

Lambdaでaws cli configureを設定できるようにする

AWS_CONFIG_FILE=/tmp/.aws/configを設定した

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

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

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

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

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

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