AWS Lambda
開発者ガイド

Node.js の AWS Lambda 関数ハンドラ

AWS Lambda は handler オブジェクトを介して Lambda 関数を呼び出します。handler は Lambda 関数を表し、AWS Lambda 関数コードの実行に使用するエントリポイントとして機能します。例:

exports.myHandler = function(event, context, callback) { ... function code callback(null, "some success message"); // or // callback("some error type"); }
  • myHandler – これは AWS Lambda が呼び出す関数の名前です。このコードを helloworld.js という名前で保存したとします。この場合、myHandler は Lambda 関数コードが含まれている関数であり、helloworld はデプロイパッケージを表すファイルの名前です。詳細については、「Node.js の AWS Lambda デプロイパッケージ」を参照してください。

  • context – AWS Lambda はこのパラメータを使用して、Lambda 関数の実行の詳細を指定します。詳細については、「Node.js での AWS Lambda Context オブジェクト」を参照してください。

  • callback (オプション) – 「コールバックパラメーターを使用する」を参照してください。

コールバックパラメーターを使用する

Node.js ランタイムでは、オプションの callback パラメータをサポートしています。これを使用して、明示的に呼び出し元に情報を返すことができます。

callback(Error error, Object result);

パラメータはいずれもオプションです。errorはオプションのパラメータであり、Lambda 関数の失敗した実行結果を表すのに使用できます。Lambda 関数が成功すると、最初のパラメーターとして NULL を渡すことができます。

result はオプションのパラメータであり、関数の正常な実行結果を表すのに使用できます。提供される result は、JSON.stringify と互換性がある必要があります。エラーになる場合、このパラメーターは無視されます。

コードで callback を使用しない場合は、AWS Lambda はそれを暗黙的に呼び出し、戻り値は null です。コールバックが呼び出されると、AWS Lambda は のイベントループが空になるまで、Lambda 関数の呼び出しを続けます。

次にコールバックの例を示します。

callback(); // Indicates success but no information returned to the caller. callback(null); // Indicates success but no information returned to the caller. callback(null, "success"); // Indicates success with information returned to the caller. callback(error); // Indicates error with error information returned to the caller.

AWS Lambda は処理された例外として、error パラメータの Null 以外の値を処理します。

このコールバックメソッドは error の Null 以外の値を表す文字列を Lambda 関数に関連付けられた Amazon CloudWatch Logs ストリームに記録します。

Lambda 関数が同期的に呼び出された場合、コールバックでレスポンスの本文が返ります。error が Null の場合は、レスポンス本文は result の文字列表現に設定されます。error が NULL 以外の場合は、error 値にはレスポンス本文が入力されます。

callback(error, null) (および callback(error)) が呼び出された場合、Lambda はエラーオブジェクトの最初の 256 KB を記録します。大きなエラーオブジェクトの場合、AWS Lambda はログを切り捨て、エラーオブジェクトの横に、テキスト「Truncated by Lambda」が表示されます。

ランタイムバージョン 8.10 を使用している場合は、async キーワードを含めることができます。

exports.myHandler = async function(event, context) { ... // return information to the caller. }

次のサンプルコードについて検討します。

exports.myHandler = function(event, context, callback) { console.log("value1 = " + event.key1); console.log("value2 = " + event.key2); callback(null, "some success message"); // or // callback("some error type"); }

この例では、myHandler という 1 つの関数を使用します。

この関数では、console.log() ステートメントが受信イベントデータの一部を CloudWatch Logs にログ記録します。callback パラメータが呼び出されると、Lambda 関数は渡されたイベントループが空になった場合にのみ終了します。

v8.10 ランタイムによって提供される async 機能を使用する場合は、次のコードサンプルを検討してください。

exports.myHandler = async function(event, context) { console.log("value1 = " + event.key1); console.log("value2 = " + event.key2); return "some success message"; // or // throw new Error("some error type"); }