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

以前の Node.js ランタイム v0.10.42 を使用する

AWS Lambda は 2016 年 4 月まで Node.js ランタイム v4.3 をサポートします。Lambda 関数の作成時にこのランタイムを指定する方法については、「CreateFunction」の runtime パラメーターを参照してください。

AWS Lambda は、以前のランタイム v0.10.42 (2014 年 11 月にリリース) のサポートを継続します。関数の作成時に runtime=nodejs を使用して参照できます。このバージョンのサポート終了が近づいているため、2016 年 12 月から、このバージョンを使用して新しい関数を作成できなくなります。既存の関数は 2017 年前半までサポートされます。関数の作成に新しいランタイム (nodejs4.3) を使用してください。できるだけ早く既存の関数から nodejs4.3 ランタイムへ移行することをお勧めします。このセクションでは、以前のランタイム v0.10.42 に独自の動作を取り上げ、既存の関数をランタイム v4.3 に移行する方法を説明します。

Node.js ランタイム v0.10.42 のコンテキストメソッド

以前の Node.js ランタイム v0.10.42 では、ランタイム v4.3 ではサポートされている Lambda 関数のコールバックパラメーターがサポートされていません。ランタイム v0.10.42 を使用する場合、以下のコンテキストオブジェクトメソッドを使用して Lambda 関数を正しく終了させます。コンテキストオブジェクトでは、Lambda 関数を終了させるために使用できるメソッドとして done()succeed()、および fail() をサポートしています。これらのメソッドは下位互換性のためにランタイム v4.3 にもあります。コードを移行してランタイム v4.3 を使用する方法については、「Lambda 関数コードを Node.js ランタイム v4.3 に移行する」を参照してください。

context.succeed()

Lambda 関数の実行と、すべてのコールバックが正常に完了したことを示します。この一般的な構文を次に示します。

Copy
context.succeed(Object result);

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

result – オプションのパラメーターであり、関数の実行結果を提供するために使用できます。

提供される result は、JSON.stringify と互換性がある必要があります。AWS Lambda が文字列化に失敗するか、別のエラーが発生した場合、X-Amz-Function-Error レスポンスヘッダーが Unhandled に設定されて、処理されない例外がスローされます。

パラメータなしでこのメソッドを呼び出す (succeed()) か、null 値を渡す (succeed(null)) ことができます。

このメソッドの動作は、Lambda 関数の呼び出しで指定された呼び出しタイプによって異なります。呼び出しタイプの詳細については、「Invoke」を参照してください。

  • Lambda 関数が Event 呼び出しタイプ (非同期呼び出し) を使用して呼び出された場合、メソッドは HTTP status 202, request accepted という応答を返します。

  • RequestResponse 呼び出しタイプを使用して Lambda 関数が呼び出された場合、このメソッドは HTTP ステータス 200 (OK) を返し、レスポンス本文を result を表す文字列に設定します。

context.fail()

Lambda 関数の実行とすべてのコールバックが成功せずに完了し、処理された例外となったことを示します。一般的な構文を以下に示します。

Copy
context.fail(Error error);

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

error – オプションのパラメーターであり、Lambda 関数の実行結果を提供するために使用できます。

error 値が Null 以外の場合、メソッドはレスポンス本文を error の文字列表現に設定し、対応するログを CloudWatch に書き込みます。AWS Lambda が文字列化に失敗するか、別のエラーが発生した場合、X-Amz-Function-Error ヘッダーが Unhandled に設定されて、処理されないエラーが発生します。

注記

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

パラメータなしでこのメソッドを呼び出す (fail()) か、null 値を渡す (fail(null)) ことができます。

context.done()

Lambda 関数の実行を終了させます。

注記

このメソッドは、"エラーファースト" コールバック設計パターンの使用を許可して、succeed() および fail() メソッドを補完します。追加の機能は提供しません。

一般的な構文:

Copy
context.done(Error error, Object result);

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

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

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

パラメータなしでこのメソッドを呼び出す (done()) か、null 値を渡す (done(null)) ことができます。

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

関数の動作は、Lambda 呼び出し時に指定された呼び出しタイプによって異なります。呼び出しタイプの詳細については、「Invoke」を参照してください。

  • 呼び出しタイプにかかわらず、このメソッドは error の Null 以外の値を表す文字列を Lambda 関数に関連付けられた Amazon CloudWatch Logs ストリームに記録します。

  • Lambda 関数が RequestResponse (同期型) を使用して呼び出された場合、このメソッドは次のようにレスポンス本文を返します。

    • error が Null の場合は、レスポンス本文を result の JSON 表現に設定します。これは context.succeed() に似ています。

    • error が Null ではない場合、または error 型の単一の引数を使用して関数が呼び出された場合は、error 値がレスポンス本文に入力されます。

注記

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

Lambda 関数コードを Node.js ランタイム v4.3 に移行する

UpdateFunctionConfiguration」を使用するか、コンソールを使用して、既存の Lambda 関数を Node.js ランタイム v4.3 を使用するように更新できます。

注記

Lambda 関数を新しいランタイムで動作するように更新する必要がある場合があります。Node.js v4.3 での変更リストは、GitHub のAPI changes between v0.10 and v4を参照してください。

以前に Node.js ランタイム v0.10.42 を使用して Lambda 関数を作成した場合は、context オブジェクトメソッド (done()succeed()、およびfail()) のいずれかを使用して Lambda 関数を終了する必要があります。Node.js ランタイム v4.3 では、これらのメソッドは主に下位互換性のためにサポートされています。callback (「コールバックパラメーターを使用する」を参照) を使用することをお勧めします。以下は context オブジェクトメソッドと同等の callback の例です。

  • 次の例では、context.done() メソッドと、これに対応する、新しいランタイムでサポートされている同等の callback を示します。

    Copy
    // Old way (Node.js runtime v0.10.42). context.done(null, 'Success message'); // New way (Node.js runtime v4.3). context.callbackWaitsForEmptyEventLoop = false; callback(null, 'Success message');

    重要

    パフォーマンス上の理由により、AWS Lambda が複数の Lambda 関数の実行で同じ Node.js 処理を再利用することがあります。その場合は、実行と実行の合間は AWS Lambda は実行を継続するために必要な状態情報を維持しながら Node 処理を停止させます。

    context メソッドが呼び出されると、AWS Lambda はプロセスに関連するイベントループが空になるまで待機せずに、Node プロセスをただちに停止します。プロセスの状態とイベントループのイベントは停止されます。関数が再度呼び出され、AWS Lambda が停止したプロセスを再利用する場合、同じ共通状態で関数の実行が継続されます (たとえば、イベントループに残ったイベントの処理が開始されます)。ただし、コールバックを使用する場合、AWS Lambda はイベントループが空になるまで Lambda 関数の実行を継続します。イベントループのすべてのイベントが処理されたら、AWS Lambda は Lambda 関数内のすべての状態変数を含めた Node 処理を停止します。したがって、コンテキストメソッドで同じ動作を行うには、context オブジェクトプロパティである callbackWaitsForEmptyEventLoop を false に設定する必要があります。

  • 次の例では、context.succeed() メソッドと、これに対応する、新しいランタイムでサポートされている同等の callback を示します。

    Copy
    // Old way (Node.js runtime v0.10.42). context.succeed('Success message'); // New way (Node.js runtime v4.3). context.callbackWaitsForEmptyEventLoop = false; callback(null, 'Success message');

  • 次の例では、context.fail() メソッドと、これに対応する、新しいランタイムでサポートされている同等の callback を示します。

    Copy
    // Old way (Node.js runtime v0.10.42). context.fail('Fail object'); // New way (Node.js runtime v4.3). context.callbackWaitsForEmptyEventLoop = false; callback('Fail object', 'Failed result');