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

コメント

タイトルとURLをコピーしました