LoginSignup
6
8

More than 5 years have passed since last update.

AWS Lambda+API Gatewayでのタイムアウト対応

Posted at

何も気にせずAWS Lambda + API GatewayでAPIを作成していたところ、

「タイムアウト発生時でもstatus code 200返ってきちゃうんすけど」

ということで慌てて対応。

その前にタイムアウトについて

API Gatewayが発生させるタイムアウトと、Lambdaが発生させるタイムアウトの2種類が存在します。

前者は自動的に504(Gateway Timeout)を返してくれるので問題ありません(Swaggerの定義ファイル上に記載すべきか迷いますが、、、ちなみに2016/9/27時点では、管理コンソールからのこのタイムアウトを発生させると504が発生したかどうか、結果が見えないのでデプロイしたURLからお試しください)。

さて、では後者は?

AWS Lambdaのタイムアウト対応

これは、API Gatewayの統合レスポンスに定義しておく必要があります。
エラーメッセージに対する正規表現で記載できるので、

.*Task timed out after.*

みたいな記載でメソッドレスポンスに定義したステータスコードと紐付ければうまく動きます。

ただ、ソースコード上からも「これは500で返したい」的な要望はあるので、その場合、私は例外メッセージの接頭辞に「INTERNAL SERVER ERROR」と付与する例外クラスを作って、統合リクエストの正規表現には

INT.*|.*Task timed out after.*

と記載したりしています。

正しいやり方なのかよくわかりませんが(オイ)、取りあえず上手く動いています!

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8