serverless-frameworkのLayerをローカルで使いたい。
困ったこと
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
Discussion