2014/11/27

AWS lambdaで外部モジュールを使う

最近AWS lambdaをいろいろ触っていて、ネタ的なものがちゃんとできたら会社のブログに書こうと思ってるんだけど、とりあえず初歩的な動かすところまでーみたいなのはこっちに書こうと思う。

AWS lambdaではAWSマネージメントコンソール上で直接jsスクリプトを書く以外に、外部モジュールもまとめてzip化してアップロードすることができる。というのでやってみた。

スクリプトを作成するプロジェクトディレクトリを掘って、その中に移動する。
$ mkdir myfunc
$ cd myfunc
外部モジュールをプロジェクトにインストールする。
$ npm install async
そんんでスクリプトを書く。
$ vi index.js
内容はこんな感じ。
---
var async = require('async');

exports.handler = function(event, context) {
  async.series([
    function (callback) {
      console.log("one");
      callback(null, "one");
    },
    function (callback) {
      console.log("two");
      callback(null, "two");
    },
    function (callback) {
      console.log("three");
      callback(null, "three");
    }
  ], function (err, results) {
    if (err) {
        throw err;
    }
    console.log('all done. ' + results);
  });
};
---

したらば、zip化する。この時面倒臭がってプロジェクトディレクトリごとzip化すると、ファイルが見つからない(Can't find module)になっちゃうので、以下のようにファイルと外部モジュールディレクトリを指定してzip化する。
$ zip -r myfunc.zip index.js node_modules
あとはこのzipファイルをアップロードして実行したら以下のように動きます。
Logs
----
START RequestId: bf1f1533-75f5-11e4-a765-67c132e1225f
2014-11-27T05:24:52.586Z bf1f1533-75f5-11e4-a765-67c132e1225f one
2014-11-27T05:24:52.625Z bf1f1533-75f5-11e4-a765-67c132e1225f two
2014-11-27T05:24:52.625Z bf1f1533-75f5-11e4-a765-67c132e1225f three
2014-11-27T05:24:52.625Z bf1f1533-75f5-11e4-a765-67c132e1225f all done. one,two,three
Process exited before completing request

END RequestId: bf1f1533-75f5-11e4-a765-67c132e1225f
REPORT RequestId: bf1f1533-75f5-11e4-a765-67c132e1225f Duration: 220.41 ms Billed Duration: 300 ms  Memory Size: 128 MB Max Memory Used: 9 MB 

Message
-------
Process exited before completing request::

さて、次はちゃんと動くスクリプトを書こう。自宅からこの本持ってきました。


初めてのJavaScript 第2版初めてのJavaScript 第2版
Shelley Powers,武舎 広幸,武舎 るみ

オライリージャパン
売り上げランキング : 397774

Amazonで詳しく見る by AZlink