Lambdaのcontextについて調べてみた
謎のcontext.doneのnull
超小ネタです。 AWS Lambdaと格闘していてcontext.doneの第一引数nullが気になって仕方がなかったので、ざくっと調べてみました。
検証コード
function getProperties(obj) { var properties = ''; for (var prop in obj){ properties += prop + "=" + obj[prop] + "\n"; } return properties; } exports.handler = function(event, context) { console.log('context = ' + getProperties(context)); context.done(null, "Hello"); }
結果
2014-12-08T08:03:23.919Z xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx context = invokeid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx done=function (err, message) { if(doneStatus) { return; } doneStatus = true; var error = null; if(!(typeof err == "undefined" || (typeof err == "object" && !err))) { error = util.format(err); console.log(error); } /* * use a timeout to perform the operation once the user gives up control of the event thread * This is how HTTP handler works right now */ setTimeout(function() { postDone(error, message); }, 0); } Message ------- Hello
出てきました。持ってるプロパティは2つだけのようですね。invokeidとdoneというfunctionだけでした。
invokeid
ログの先頭に付与されていた値と同じものが入っていたので、Lambdaを実行する際に発行される一意なキーのようです。
done
サンプルでも最後にcontext.done()で実行されてました。1番目の引数にエラーオブジェクト、2番めの引数にメッセージオブジェクトを埋め込めば良いようです。
まとめ
JavaScriptは気軽に中が覗けて良いですね。context.done(null, message)の「nullってなんだよ」と思ったので調べてみました。 successHandlerとかfailHandlerを作らずに、ErrorもSuccessもひっくるめてdone一つで済ませちゃうんですね。JavaScriptの文化なのでしょうか( ꒪⌓꒪)