AWS Lambdaファンクションを開発するときはNode.jsのバージョンにご注意を

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

東京リージョンも来て、さらに盛り上がっているAWS Lambda。
ただ、そんな時、Node.jsのバージョンを気にしておく必要があります。

AWS Lambdaが動くNode.jsのバージョンは・・・

公式ドキュメントを見ればわかるのですが、 AWS Lambda上で動いているNode.jsのバージョンは、v0.10.33 となります。 また、現行公式サイトからダウンロードできるNode.jsはv0.12.6のため、かなり乖離があることがわかります。

Promiseが使えない

Angular.jsで開発している方には既にお馴染みのPromiseがNode.jsでも実装されています。 しかし、使えるのはv0.12以降のため、Lambda上では使うことができません。 使おうとすると以下の様なエラーが出ます。

{
  "errorMessage": "Process exited before completing request"
}

もし、Promiseを使いたい場合は、bluebird等の実装がありますので、 そちらを組み込んだ上で動かすことでPromiseを用いた実装をすることが可能です。

petkaantonov/bluebird

$ npm install -save bluebird

app.js

var Promise = require("bluebird");

ローカルでLambdaファンクションを実行したい。

参考元の記事そのままなのですが、下記のようなドライバを作成することで、 ローカルでLambdaファンクションを実行することが可能です。 また、doneの中のdataを参照することで処理の結果の確認も可能です。

driver.js

// We will put dummy objects for event and context;
var event = {};
var context = {
    // InvokeID may be unique invocation id for AWS Lambda.
    invokeid: 'string',
    // context.done() should be called for end of each invocation.
    // We would want to stub this.
    done: function(err,data){
        console.log(data);
        return;
    }
};

// Then we can load and run your function.
var yourLambdaFunction = require('./app');
yourLambdaFunction.handler(event,context);
$ node driver.js

まとめ

Node.jsのバージョンので発生する障害と、ぷちtipsのご紹介でした。

参考サイト

AWS Lambdaの関数をnpmでパッケージ管理 - Qiita