読者です 読者をやめる 読者になる 読者になる

console.lealog();

@leader22のWeb系に関する勉強めもブログですのだ

AWSのLambdaで、zipにしたコードを動かす時にハマったこと

短いコードならインラインで書いてしまってもいいですが、npmのモジュール使ったりするとインラインではダメで、zipで固めてアップロードする必要があります。

簡単にできると思いきや、スッと動いてくれなかったので・・。
ハマったポイントのメモ。

Cannot find module ...

たいだいハマるのがこのエラーな気がして、これが出た時にどの部分をあわせればちゃんと動くのかのメモです。

ハンドラー設定とファイル名と関数名

ハンドラー設定は、初期設定で`index.handler`ってなってるとこ。
あれと、zipで固めたコードのファイル名とその中でエクスポートしてる関数名が一致してないとダメ。

- index.js
- node_modules

こういうzipなら、`index.handler`にしないとダメ。

そしてもちろんこう。

// index.js
exports.handler = fuction(ev, ctx) {
	// ...
};

"index".jsでエクスポートしてる"handler"関数だから、ハンドラーの設定は"index.handler"になる。

なので、

// hello.js
exports.world = fuction(ev, ctx) {
	// ...
};

なら、ハンドラー設定のところは、`hello.world`にすれば動く。

モジュールの依存関係

- myFunc.js
  - github
    - mime

myFunc.jsで `require('github')` したなら、githubモジュールが依存してる`mime`も一緒に固めないとダメ。

なので、`node_modules/github`で`npm i --production`とかする必要がある。

どうでもいいもの

  • Lambda Functionの関数名
  • zipのファイル名(アーカイブ.zipで良い)

まぎらわしい!

チェックリスト

  • Handler名とファイル名と関数名が一致している
  • node_modules内の全てのモジュールの依存関係が解消されてzipの中に入ってる