困ったこと
Lambdaで外部ライブラリを利用する場合、Lambdaにコードをアップロードするときに一緒にアップロードする必要があります。
さらに、Lambdaには一つ50MBまでという制約もあり、ライブラリによってはそれ単体で50MBを超える場合もあったりするので、そもそもアップロードできない!ということにもなる場合があります。私はPuppetierをLambdaで利用しようとしたときにこの問題に引っかかりました。(Puppetierは内部でヘッドレスChromeを使っているのでサイズが大きい)
解決策
Lambdaレイヤーを使うことにより、この問題を解決することができました。
ただ、Lambdaレイヤーのアップロードはコンソールを使う場合は、まずローカルでZipファイルを作ってそれをアップロードするという手順を取るのですが、これを毎回やるのは面倒なので、簡単なシェルを作って簡単にアップロードできるようにしました。
以下のシェルをプロジェクトルートディレクトリに置いておき、Lambdaレイヤーを更新する際はこれを実行すればOKというわけです。便利!
このシェル内ではaws cliを使っていますので、aws cliをインストールしてから実行する必要があります。
lambda-layer-upload.sh
## 直下にあるnode_moduleをzip化する。
mkdir lambda_layer
cp -r node_modules lambda_layer
zip -r lambda_layer.zip lambda_layer
rm -rf lambda_layer
## 作ったzipファイルをレイヤーとしてアップロードする。
aws lambda publish-layer-version --layer-name my-lambda-layer --description "my lambda layer" --license-info "MIT" --zip-file fileb://lambda_layer.zip --compatible-runtimes nodejs10.x nodejs12.x
誰かの参考になれば幸いです。