📝

serverless-frameworkのLayerをローカルで使いたい。

2021/06/07に公開

困ったこと

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

GitHubで編集を提案

Discussion