AWSでラムダ関数を使用するのが大好きです。理想的には、サーバーのメンテナンスにかかる時間を理想的に短縮できました。私の質問は、ラムダを使用する場合、コンテキストオブジェクトと関数を終了するコールバック関数が存在することです。コンテキスト上でコールバックを使用する使用例はありますか。
Context.succeed()の動作をcallback(error、message)に教えてもらえますか
var startedAt = new Date();
var interval = setInterval(function () {
console.log(startedAt, new Date());
}, 1000);
exports.handler = function (event, context, callback) {
setTimeout(function () {
console.log('returning');
// v1:
return callback(null);
// v2:
// return context.succeed();
}, 5000);
};
context.succeed
は古いやり方であり、0.10.42ランタイムでサポートされています(callback
パラメーターは特にそうではありません)。新しいランタイム(4.3および6.10)で実行している場合、下位互換性のために含まれていますが、「適切な」方法はcallback
機能を使用することです。
Herecallback
はcontext.succeed
の改善として表されます。
さらに、 イベントループ により、Node.jsは非ブロッキングI/O操作を実行できます。 callback
が予想より長く待機する場合、イベントループに他の未完了のタスクがあることに気づかないことを意味し、これは問題です。キューで待機しているタスクを知る必要があります。 次の関数 を使用して、callback
が待機している理由を理解できます。
process._getActiveHandles() //gets you handles that are still alive
process._getActiveRequests() //gets you info about active libuv requests.
これらのタスクを完了する前にラムダを凍結すると、予期しない動作が発生する可能性があります。次のラムダ実行は、同じコンテナで実行できます。これは、前のラムダ実行のイベントループタスクが現在のラムダ実行で完了することを意味します。
また、exports.handler
に対して複数のテストがあり、callback
ですべてのテストが独立していると仮定します。 context.succeed
を使用すると、最初のテストのために2番目のテストが(失敗する代わりに)合格し、イベントループにタスクが残ります。