困ったこと
serverless-frameworkでLayerを使っていて、
デプロイした後に、AWS Lambdaコンソールで実行すると、動くのに、
ローカルで実行すると動かない問題があった。
解決方法
--dockerオプションを指定することで、解決しました。
裏でDocker-lambdaが起動するみたいです。
Docker-lambda
https://github.com/lambci/docker-lambda
手順
最終的な構成はリポジトリ公開しています。
分かりやすいように、node_modulesまでコミットしています。
https://github.com/goda-kazuki/serverless-framework-sample
npmの初期化npm init
serverlessのインストール
npm install --save-dev serverless
プロジェクト作成
npx sls create --template aws-nodejs --name sample --path sample
作成したプロジェクトに移動
cd sample
ローカルで実行
npx sls invoke local -f hello
レイヤーを追加する
mkdir layer mkdir layer/nodejs
momentを追加
npm init npm install moment
handler.jsにmomentを使うように指定
以下を追加 require('moment')
実行(失敗する)npx sls invoke local -f hello
serverless.ymlに以下を追加
functions: hello: handler: handler.hello layers: - { Ref: SampleLambdaLayer } layers: Sample: path: layer description: my sample layer compatibleRuntimes: - nodejs12.x
実行(失敗する)
npx sls invoke local -f hello
--dockerオプションを追加して実行(成功する)
npx sls invoke local -f hello --docker
その他
Githubで質問したところ、丁寧に回答いただけました。(感謝)
https://github.com/serverless/serverless/issues/9535
コメント