AWS Lambda
開発者ガイド

Lambda 関数ハンドラー (Node.js)

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

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

    AWS Lambda は、2 つの呼び出しタイプをサポートします。

    • RequestResponse、または synchronous execution: AWS Lambda は、Lambda 関数を呼び出すクライアントに対する関数呼び出しの結果を返します。Lambda 関数のハンドラコードで戻り値が指定されていない場合、AWS Lambda は自動的にその値に null を返します。

    • Event、または 非同期実行: AWS Lambda は関数呼び出しの結果を破棄します。

      注記

      Lambda 関数が非同期呼び出しを使用したイベントを処理していない場合、「デッドレターキュー」を使用して障害を調査できます。

      イベントソースは、サポートされている AWS サービスまたは Lambda 関数を呼び出すカスタムアプリケーションを対象にすることができます。例については、「イベントソースによって公開されたサンプルイベント」を参照してください。

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

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

Node.js ランタイム v6.10 および v8.10 はオプションで 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 以外の値を処理します。

次の点に注意してください。

  • Lambda 関数の呼び出し時に指定される呼び出しタイプにかかわらず (「Invoke」を参照)、コールバックメソッドは error の NULL 以外の値を表す文字列形式を Lambda 関数に関連付けられた Amazon CloudWatch Logs ストリームに記録します。

  • Lambda 関数が同期的に (RequestResponse呼び出しタイプを使用して) 呼び出された場合、コールバックは次のようにレスポンス本文を返します。

    • 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. }

次の Node.js のコード例を考えます。

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”); }

このコードを Lambda 関数としてアップロードしてテストするには (コンソール)

  1. コンソールで、以下の情報を使用して Lambda 関数を作成します。

    • hello-world 設計図を使用します。

    • この例では nodejs6.10ランタイムとして使用しますが、nodejs8.10 を選択することもできます。提供されているコードサンプルはどのバージョンでも動作します。

    コンソールを使用して Lambda 関数を作成する手順については、「シンプルな Lambda 関数を作成する」を参照してください。

  2. テンプレートコードをこのセクションで提供されているコードに置換し、関数を作成します。

  3. Lambda コンソールが提供する [Hello World] という [Sample event template] を使用して Lambda 関数をテストします。