node_modules を含んだ AWS Lambda Layers を作成して Lambda 関数に追加する方法

node_modules を含んだ AWS Lambda Layers を作成して Lambda 関数に追加する方法をご紹介します。

AWS

背景 Lambda Layers に node_modules を追加したい

Lambda 関数から利用する node_modules を Lambda Layers に追加する方法を調べて検証しました。

AWS SDK for JavaScript を Node.js Lambda 関数に統合する

事例 Lambda Layers に aws-sdk を作成する手順

Lambda Layers に追加する zip ファイル作成

mkdir -p aws-sdk-layer/nodejs
cd aws-sdk-layer/nodejs

npm init

docker run --entrypoint "" \
-v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:14" \
/bin/sh -c "npm install aws-sdk --save; exit"

zip -r ../package.zip ../

Lambda Layers へ zip ファイルを deploy

aws lambda publish-layer-version \
--layer-name aws-sdk \
--description "aws-sdk layer" \
--license-info "MIT" \
--compatible-runtimes nodejs14.x \
--zip-file fileb://../package.zip \
--region ap-northeast-1

Lambda 関数に Lambda Layers を追加

aws lambda update-function-configuration \
--function-name your-lambda-function \
--layers arn:aws:lambda:ap-northeast-1:xxxxxx:layer:aws-sdk:1 \
--region ap-northeast-1

デフォルトの aws-sdk version との違い

  • v2.880.0 : Lambda Layers の aws-sdk を利用し無い場合(デフォルト)
  • v2.960.0 : Lambda Layers の aws-sdk を利用する場合

事例 Lambda Layers に @google-cloud/bigquery を作成する手順

Lambda Layers に追加する zip ファイル作成

mkdir -p google-cloud-bigquery-layer/nodejs
cd google-cloud-bigquery-layer/nodejs

docker run --entrypoint "" \
-v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:14" \
/bin/sh -c "npm install --save @google-cloud/bigquery; exit"

zip -r ../package.zip ../

Lambda Layers へ zip ファイルを deploy

aws lambda publish-layer-version \
--layer-name google-cloud-bigquery \
--description "@google-cloud/bigquery layer" \
--license-info "MIT" \
--compatible-runtimes nodejs14.x \
--zip-file fileb://../package.zip \
--region ap-northeast-1

Lambda 関数に Lambda Layers を追加

aws lambda update-function-configuration \
--function-name your-lambda-function \
--layers arn:aws:lambda:ap-northeast-1:xxxxxx:layer:google-cloud-bigquery:1 \
--region ap-northeast-1

以上、Lambda Layers に node_modules を追加して Lambda 関数から利用したい、現場からお送りしました。