メニュー
AWS Lambda
開発者ガイド

例外 (Node.js)

Lambda 関数が context.fail メソッドを呼び出して、正常に実行できなかったことを AWS Lambda に通知すると、AWS Lambda はそのエラー情報をシリアル化して返します。context.fail に渡されるエラー値が例外である場合、Lambda はその例外に関する情報 (タイプ、エラーメッセージ、スタックトレース、など) をシリアル化しようとします。例外ではない場合、Lambda はエラーオブジェクトを文字列に変換しようとします。次の例を考えます。

Copy
console.log('Loading function'); exports.handler = function(event, context, callback) { // This example code only throws error. var error = new Error("something is wrong"); callback(error); };
この Lambda 関数を呼び出すと、関数の実行がエラーで終了したことが AWS Lambda に通知され、エラー情報が AWS Lambda に渡されます。AWS Lambda はクライアントにエラー情報を返します。

Copy
{ "errorMessage": "something is wrong", "errorType": "Error", "stackTrace": [ "exports.handler (/var/task/index.js:10:17)" ] }
スタックトレースは、スタックトレース要素の JSON 配列 stackTrace として返されることに注意してください。

返されるエラー情報の取得方法は、関数呼び出し時にクライアントが指定する呼び出しタイプによって決まります。

  • クライアントが RequestResponse 呼び出しタイプ (同期実行です) を指定した場合、呼び出しを行ったクライアントに結果が返ります。

    たとえば、コンソールは常に RequestResponse 呼び出しタイプを使用するため、[Execution result] セクションに次のようなエラーが表示されます。

    同じ情報は、CloudWatch にも送信され、[Log output] セクションに同じログが表示されます。

  • クライアントが Event 呼び出しタイプ (非同期実行です) を指定した場合は、AWS Lambda は何も返しません。代わりに、CloudWatch ログにエラー情報がログ記録されます。CloudWatch メトリクスでエラーメトリクスを確認することもできます。

イベントソースに応じて、AWS Lambda はエラーになった Lambda 関数を返す場合があります。たとえば、Amazon Kinesis がイベントソースである場合、AWS Lambda は Lambda 関数が成功するかストリームのレコードの有効期限が切れるまで、エラーになった呼び出しを再試行します。再試行の詳細については、「エラー時の再試行」を参照してください。

前述の Node.js コード (コンソール) をテストするには

  1. コンソールで、hello-world 設計図を使用して Lambda 関数を作成します。[runtime] で [Node.js] を選択し、[Role] で [Basic execution role] を選択します。これを行う手順については、「ステップ 2.1: Hello World Lambda 関数を作成する」を参照してください。

  2. テンプレートコードをこのセクションで提供されたコードに置き換えます。

  3. Lambda コンソールが提供する [Hello World] という [Sample event template] を使用して Lambda 関数をテストします。これを行う手順については、「ステップ 2.2: Lambda 関数を手動で呼び出し、結果、ログ、メトリクスを確認する」を参照してください。