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

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

Lambda 関数を作成するときに、ハンドラーを指定します。これはサービスでコードを実行する際に AWS Lambda が呼び出すことができるコード内の関数です。Node.js でハンドラー関数を作成する場合は、次の一般的な構文を使用します。

Copy
exports.myHandler = function(event, context,) { ... }

コールバックパラメータは、呼び出し元に情報を返すかどうかによって、省略可能です。

Copy
exports.myHandler = function(event, context, callback) { ... // Use callback() and return information to the caller. }

構文では、以下の点に注意してください。

  • event — AWS Lambda はこのパラメーターを使用してイベントデータをハンドラーに渡します。

  • context — AWS Lambda はこのパラメーターを使用して、実行中の Lambda 関数のランタイム情報をハンドラーに提供します。詳細については、「Context オブジェクト (Node.js)」を参照してください。

  • callback – コールバックオプションは呼び出し元に情報を返すために使用できます。使用しない場合戻り値は null です。詳細については、「コールバックパラメーターを使用する」を参照してください。

    注記

    コールバックは Node.js ランタイム v6.10 および v4.3 でのみサポートされています。ランタイム v0.10.42 を使用している場合は、コンテキストメソッド (done、succeed、および fail) を使用して Lambda 関数を正常に終了する必要があります。詳細については、以前の Node.js ランタイム v0.10.42 を使用する を参照してください。

  • myHandler – これは AWS Lambda が呼び出す関数の名前です。これをエクスポートして、AWS Lambda に表示されるようにます。 このコードを helloworld.js という名前で保存したとします。この場合、helloworld.myHandler がハンドラーです。詳細については、CreateFunctionのハンドラーを参照してください。

    • RequestResponse呼び出しタイプ (同期実行) を使用する場合、AWS Lambda は Node.js 関数呼び出しの結果を、Lambda 関数を呼び出したクライアントに返します (呼び出しリクエストに対する HTTP レスポンスでは、JSON にシリアル化されます)。たとえば、AWS Lambda コンソールは、RequestResponse 呼び出しタイプを使用するため、コンソールを使用して関数をテスト呼び出しすると、コンソールに戻り値が表示されます。

      ハンドラーが何も返さない場合、AWS Lambda は Null を返します。

    • Event 呼び出しタイプ (非同期実行) を使用すると、値は破棄されます。

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

Copy
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"); }

この例では、1 つの関数があり、この関数がハンドラーでもあります。この関数では、console.log() ステートメントが受信イベントデータの一部を CloudWatch Logs にログ記録します。コールバックが呼び出された場合、Lambda 関数は Node.js イベントループが空になった後でのみ終了します (Node.js イベントループは、パラメーターとして渡されたイベントに同じではありません)。

注記

ランタイム v0.10.42 を使用している場合は、コンテキストメソッド (done、succeed、および fail) を使用して Lambda 関数を正しく終了する必要があります。詳細については、「以前の Node.js ランタイム v0.10.42 を使用する」を参照してください。

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

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

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

    • [nodejs6.10] は [runtime] として指定することをお勧めしますが、[nodejs4.3] を選択することもできます。提供されているコードサンプルはどちらのバージョンでも動作します。

    • [Handler] の index.handler を exports.myHandler と置き換えます。

    コンソールを使用して Lambda 関数を作成する手順については、「ステップ 2.1: Hello World Lambda 関数を作成する」を参照してください。

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

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

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

Node.js ランタイム v4.3 および v6.10 はオプションで callback パラメータをサポートします。これを使用して、明示的に呼び出し元に情報を返すことができます。一般的な構文:

Copy
callback(Error error, Object result);

各パラメーターの意味は次のとおりです。

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

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

注記

この callback パラメーターの使用はオプションです。オプションの callback パラメーターを使用していない場合は、パラメーターを指定しないで callback() を呼び出した場合と同じ動作になります。コードで callback を指定して、呼び出し元に情報を返すことができます。

コードで callback を使用しない場合は、AWS Lambda はそれを暗黙的に呼び出し、戻り値は null です。

コールバックが (明示的または暗黙的に) 呼び出されると、AWS Lambda は Node.js のイベントループが空になるまで、Lambda 関数の呼び出しを続けます。

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

Copy
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」が表示されます。