関数実行中に 2 種類のエラーが発生することがあります。
- Handled error:ユーザー関数によって自主的に取得され、コールバックによって返されるエラー。
- Unhandled error:構文エラー、 リクエストタイムアウト、メモリ不足などの、ユーザー関数によって取得されないエラー。
Function Compute はエラーを JSON 文字列にエンコードし、呼び出し元に返します。
Handled Error
ユーザー関数がエラーを取得して callback(err) で返すとき、err パラメーター が Error 型のオブジェクトである場合、スタックトレースも返されます。
// User function.
exports.handler = function(event, context, callback) {
var error = new Error("something is wrong");
callback(error);
};
// Function response.
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [
"export.handler (/var/task/index.js.3:16)"
]
}
callback パラメーターがエラーではないオブジェクトの場合、スタックトレースは返されません。
// User function.
exports.handler = function(event, context, callback) {
callback("something is wrong");
};
// Function response.
{
"errorMessage": "something is wrong"
}
Unhandled Error
ユーザー関数がエラーを取得しない場合、Function Compute は可能な限りエラーを取得しようとし、詳細情報を返します。たとえば、ユーザー関数が予期せずクラッシュして実行中に終了するなど、システムがエラーの取得に失敗した場合、システムは一般的なエラーを返します。
一般的なエラーシナリオ
エラータイプ | シナリオ | エラー情報 |
---|---|---|
Handled | callback(err) によって返されるエラー。err の型は Error です。 | {“errorMessage”: “oops”, “errorType”: “Error”, “stackTrace”: [“exports.handler (/var/task/index.js:5:14)”]} |
Handled | callback(obj) によって返されるエラー。obj はエラーではないオブジェクトです。 | {“errorMessage”: “oops”} |
Unhandled | 関数が依存するモジュールが存在しません。 | {“errorMessage”: “Cannot find module ‘/code/X.js”} |
Unhandled | 指定されたハンドラ関数が存在しません。 | {“errorMessage”: “Handler ‘X’ missing on module ‘Y’”} |
Unhandled | 関数の実行がタイムアウトします。 | {“errorMessage”: “Task timed out after X seconds”} |
Unhandled | 別のユーザープログラムに関連して処理されるエラー。 | {“errorMessage”: “Process exited unexpectedly before completing request”} |