1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「API Gateway で Lambda エラーを処理する」が動かなかった話

Posted at

元ネタ
API Gateway で Lambda エラーを処理する

※2019.10.08 AWSのドキュメントのフィードバックに報告済みなのでドキュメント側も修正済みの場合があります

このドキュメントですが、これに書いてある通りにやってもエラー処理が正常にできずステータス200が帰ってきてしまう。

原因はここの誤記

aws apigateway put-integration-response --rest-api-id [rest-api-id] --resource-id [resource-id] --http-method GET --status-code 400 --selection-pattern "Invalid*" --region us-west-2

"Invalid*""Invalid.*"にするとちゃんと動きました。

詳しい解説

誤記について

--selection-patternは正規表現を用いることになっていますが

基本的な正規表現一覧

によると、"Invalid*"だと"Invalid〜"みたいな文字列にはマッチしません。
("Invali", "Invalid", "Invaliddddd"とかがマッチ対象になるのかな)
なので、"Invalid〜"に対応させるには"Invalid.*"と表記します。

Lamvda -> API Gateway でのエラー検知について

上記の正規表現ですが「どこをみてるの?」という話。
結論から言うと標準エラーからハンドリングする場合は

{
  "errorMessage": "Malformed input ...",
  "errorType": "Error",
  "stackTrace": [
    "exports.handler (/var/task/index.js:3:14)"
  ]
}

こちらの標準エラーの"errorMessage"が上記正規表現の対象になるみたいです。
なので、ドキュメントの解説に沿って対応させるには正規表現は"Malformed.*"と設定する必要があります。

まとめ

以下のようにそれぞれのステータスコードを設定していくと管理しやすそうですね。

Lambdaエラーの正規表現
400.*
メソッドレスポンスのステータス
400

レスポンス処理

Node.js
exports.handler = function(event, context, callback) {
    callback(new Error("400 Bad Request"));
};
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?