「API Gateway で Lambda エラーを処理する」が動かなかった話
元ネタ
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
レスポンス処理
exports.handler = function(event, context, callback) {
callback(new Error("400 Bad Request"));
};
Author And Source
この問題について(「API Gateway で Lambda エラーを処理する」が動かなかった話), 我々は、より多くの情報をここで見つけました https://qiita.com/HiroshiUyama/items/bb4d2200aa8b683489a1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .