Lambda Layerにnode_modulesと自作モジュールを含めてCloudFormationでLambdaデプロイする
| 前提 |
|---|
| node.js v18 |
Lambdaレイヤーに自作モジュールであるcommon.mjsを含めてデプロイします。
layerの構成です。node_modules直下にlib/common.mjsを配置しています。
layer
└─nodejs
│
├─node_modules
│ ├─lib
│ │ └─common.mjs // 自作モジュール
│ └─luxon
├─package.json
└─package-lock.json
Lambda
Lambdaの構成です。
src └─index.mjs
index.mjsです。
import {DateTime} from 'luxon'
import {Log} from 'lib/common.mjs' //★
export const handler = async(event) => {
const date = DateTime.now().setZone('Asia/Tokyo').toFormat('yyyy/MM/dd')
Log.info(data) // console.log()みたいなものと思って..
return {
statusCode: 200,
body: `Hello`
}
}
CloudFormation
cloudformationのymlです。cfn.ymlとします。
AWSTemplateFormatVersion: "2010-09-09"
Transform: "AWS::Serverless-2016-10-31"
Resources:
LambdaLayer:
Type: "AWS::Serverless::LayerVersion"
Properties:
LayerName: layername
ContentUri: layer/
CompatibleRuntimes:
- nodejs18.x
RetentionPolicy: Delete
TestFunction:
Type: "AWS::Serverless::Function"
Properties:
FunctionName: functionname
Handler: index.handler
Runtime: nodejs18.x
CodeUri: src/
Layers:
- !Ref LambdaLayer
package deploy
package & deployします。
$ aws cloudformation package --template-file cfn.yml --s3-bucket バケット名 --output-template-file cfn_out.yml $ aws cloudformation deploy --template-file cfn_out.yml --stack-name スタック名 --capabilities CAPABILITY_IAM
これでLambdaがデプロイされ、正常動作します。
テストコード
テストコードの構成です。
test └─index.test.mjs
layer配下に自作モジュールがあるので、プロジェクト直下のnode_modulesにlibフォルダのシンボリックリンクを作成すればテストコードも実行できます。
※npm iが動作しなくなるケースがあるとの事 https://github.com/npm/npm/issues/10013
コマンドプロンプト(管理者権限)
c:\<プロジェクトルート>\node_modules\>mklink /D lib ..\layer\nodejs\node_modules\lib
自作モジュールはCodeArtifactでnpmプライベートリポジトリにpublishする方がよさそうです。
「AWS CodeArtifactでLambda(node.js)のライブラリ管理する」参照
参考サイト
レイヤーによる Lambda 依存関係の管理 - AWS Lambda
このセクションでは、AWS レイヤーを使用してアプリケーションコードを依存関係から分離する方法について説明します。
Modules: ECMAScript modules | Node.js v25.2.1 Documentation
Modules: ECMAScript modules | Node.js v18.20.8 Documentation

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^




コメント