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 v21.4.0 Documentation
Modules: ECMAScript modules | Node.js v18.19.0 Documentation
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント