4

ラムダ関数からカスタム エラー タイプを送り返したいと思います。errorType プロパティに表示される内容を制御して、API ゲートウェイにエラーが返されるようにするにはどうすればよいですか?

 var err = new Error('foo');
 context.fail(err);

戻り値

{
  "errorMessage": "foo",
  "errorType": "Error",
  "stackTrace": [
    "exports.handler (/var/task/index.js:11:19)"
  ]
}

レスポンスの errorType が のようなものになるように操作したいと思い"InvalidParam"ます。

4

2 に答える 2

5

返された errorType は、エラーに設定された 'name' プロパティを表します。

したがって、次のコード:

var error = new Error('Its an error!');
error.name = 'TheName';

context.fail(error);

Lambda から API Gateway への次の応答が返されます。

{
  "errorMessage": "Its an error!",
  "errorType": "TheName",
  "stackTrace": [
    "exports.handler (/var/task/index.js:10:21)"
  ]
}

残念ながら、API Gateway は Error Regex を「errorMessage」プロパティにのみ一致させるようです。少なくとも私の試みとこれまで読んだことに基づいています。そのため、ステータス コードにマップしようとしている場合、エラー タイプを設定しても役に立ちません。(コメントで述べたように)

両方の世界を少しだけ取得する 1 つの方法は、context.fail を呼び出すときにエラーを "toString()" することです。これにより、エラー メッセージが "[名前]:[エラー メッセージ]" の形式になります。

次に、API Gateway Error Regex を特定のエラー「name」プロパティに一致させることができます。

だから呼び出す:

var error = new Error('Its an error!');
error.name = 'TheName';

context.fail(error.toString());

API Gateway Regex がステータス 500 にマッピングされた場合:

TheName.*

次のステータス 500 API Gateway レスポンスが返されます。

{
  "errorMessage": "TheName: Its an error!"
}
于 2015-11-19T06:53:15.810 に答える
0

最近、Lambda レスポンスのエラー マッピングが拡張され、クライアントに 4xx ステータス コードが返されるようになりました。この機能は引き続き改善されています。

マイケルの答えは、メッセージと一緒に名前を送り返すのに適しています。

于 2015-12-17T23:09:06.563 に答える