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ディレクトリで管理してるからできるわけですけど、全てレイヤーにまとめている場合はシンボリックを使った方がいいでしょうかね?