serverless frameworkを使ってlambdaの開発をしているときよく使う便利機能が、AWS - Invoke Localです。
これを使えばローカルでlambdaのコードを実行できます。
公式サイトにもある通り、以下のコマンド実行できるわけですが、
serverless invoke local --function functionName
最初はこれでこと足りるわけですが、実際の開発ではAWS Lambda レイヤーを使うことが多いので、フォルダ構造が以下のようになると思います。
-layer/nodejs/node_modules
-serverless.yml
このようなフォルダ構造だと単純にserverless invoke local --function functionNameを実行するとレイヤーにあるnpmが参照できずにエラーになるので、invoke local実行時にレイヤーを参照するようにパスを作ってやる必要があります。
ググってみるとシンボリックを使って実装している人もいたのですが、僕の場合はpackage.jsonにスクリプトを書いて実行するようにしました。
{
"name": "serverless-framework-cli",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"local": "export NODE_PATH=\"layer/nodejs/node_modules\" && npx serverless invoke local --function changePassword"
}
}
こうしとけばあとはnpm run localを実行するだけでローカルでlambdaを実行することができます。
まぁ、僕の場合はレイヤーに置く必要ないServer FrameworとESLintをrootディレクトリで管理してるからできるわけですけど、全てレイヤーにまとめている場合はシンボリックを使った方がいいでしょうかね?