Help us understand the problem. What is going on with this article?

ローカルで AWS Lambda をうごかしてみる。そのための exports 入門サンプル。

More than 3 years have passed since last update.

AWS Lambda を使いはじめました。マネジメントコンソール画面から Test ボタンを押せば Lambda を走らせることができるのですが、それだと毎回、マネジメントコンソールのソースをいじらないといけません。できれば、ローカルのファイルを修正して、ローカルでその Lambda を走らせたいです。

きっと、いろいろ方法はあると思いますが、とても安易に、node index.js 的なノリで軽く動かしたいと思います。

exports.hoge について

~/workspace/hoge.js
exports.piyo = function(){
    console.log("Hello");
}
~/workspace
$ node
> const hoge = require('./hoge.js')
undefined
> hoge.piyo()
Hello
undefined

このようにできます。

Lambda の index.js で試してみる。

Lambda の index.js は以下の構造になっていますので、

index.js
exports.handler = (event, context, callback) => {
    ...処理...
}

hoge.js と同じノリで叩いてみます。

$ node
> const lambda = require('./index.js')
undefined
> lambda.handler()
TypeError: callback is not a function
    at Object.exports.handler.https.get.req.on [as handler] (/Users/mochizuki/Developments/ferretone-pardot/index.js:45:3)
    at repl:1:8
    at REPLServer.defaultEval (repl.js:262:27)
    at bound (domain.js:287:14)
    at REPLServer.runBound [as eval] (domain.js:300:12)
    at REPLServer.<anonymous> (repl.js:431:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:211:10)
    at REPLServer.Interface._line (readline.js:550:8)

こんな感じになります。

コールバックが function じゃないぞ、と言われていますので、適当に引数をセットしてみます。

> lambda.handler(null, null, function(){})
undefined
> STATUS: 200

無事できました。

ひとまず、これで僕のニーズは満たされたので、すこしはデバッグがやりやすくなりました。

まだまだ、知らないことがたくさんなので、すこしずつできることを増やして行きたいです。 :walking_tone1:

追記 require キャッシュ強い問題

index.js を更新したあとに、lambda.handler() を叩いてもキャッシュされてるので更新されません。結局以下のフィアルを用意して、node lambda_test.js を叩いて動かすことにしました。

lambda_test.js
var lambda = require('./index.js')
lambda.handler(null, null, function(){})
delete require.cache[require.resolve('./index.js')]
$ node lambda_test.js
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした