Node.js AWS Lambda:NodeJs自定义层
我是nodejs和aws lambda的新手。我正在尝试为我的lambda函数组创建一个带有公共函数的层。 在lambda处理程序中,自定义模块的导入具有以下定义:Node.js AWS Lambda:NodeJs自定义层,node.js,aws-lambda,aws-lambda-layers,Node.js,Aws Lambda,Aws Lambda Layers,我是nodejs和aws lambda的新手。我正在尝试为我的lambda函数组创建一个带有公共函数的层。 在lambda处理程序中,自定义模块的导入具有以下定义: let commonService=require(“@common/service”) 带有模块文件的zip具有以下结构: nodejs --node_modules --@custom --service --index.js --package.json 但我得到了一个错误: “errorMe
let commonService=require(“@common/service”)代码>
带有模块文件的zip具有以下结构:
nodejs
--node_modules
--@custom
--service
--index.js
--package.json
但我得到了一个错误:
“errorMessage”:“错误:找不到模块'@common/service'\n需要堆栈:\n-/var/task/index.js\n-/var/runtime/UserFunction.js\n-/var/runtime/index.js”,
@custom/service module package.json包含以下内容:
{
"name": "@common/service",
"version": "1.0.0",
"main": "index.js",
"license": "ISC",
"dependencies": {
/***
}
}
提前谢谢 尝试使用
使用图层有两大好处
- 它允许您在一个地方部署基本依赖项并集中管理它们
- 它缩小了Lambda应用程序部署的大小。不再需要每次上载大量的
节点\u模块
文件夹层次结构
如何使用它们?这是一个相当深入的话题,但要点是你可以:
在AWS中构建和部署一个层。一个图层只不过是一个“裸”的npm项目,真的。您可以在其中安装常用的NodeJS模块,而不安装其他模块
假设您使用无服务器应用程序模型来部署AWS Lambda函数,则可以将Lambda函数配置为使用层。下面是SAM yaml文件的精简版本,说明了这一点:
AWSTemplateFormatVersion:'2010-09-09'
转换:“AWS::Serverless-2016-10-31”
描述:我的无服务器应用程序
参数:
# ...
全球:
功能:
运行时:nodejs10.x
#环境:
#变量:
#节点环境:测试
资源:
CommonDependenciesLayer:
类型:AWS::Serverless::LayerVersion
特性:
LayerName:我的常见缺点
描述:my NodeJS应用程序的常见依赖项
ContentUri:../common deps/
保留政策:保留
元数据:
构建方法:nodejs10.x
performSomeFunction:
类型:“AWS::Serverless::Function”
特性:
FunctionName:performSomeFunction
处理程序:lambda.someFunction
层:
#您可以像这样引用此SAM文件中定义的图层。
# - !参考CommonDependenciesLayer
# ... 也可以硬编码外部ARN
#-arn:aws:lambda:us-east-1:nnnnnnn:layer:myapp公共部门:5
代码URI:/
# ...
在Lambda代码中,只需使用正常的CJS require语法即可。例如,假设我将mysql
库放在上面的CommonDependenciesLayer
中。只要Lambda函数指向SAM文件中的层,我所要做的就是在代码中require('mysql')
。它会在那儿的
当它开始工作时,有一些关于层部署的微妙之处需要考虑
- 是否每次都要构建层?(可能不会,但我建议您在学习层和lambda如何协同工作时这样做)
- 我的图层组件多久更改一次
- 我想公开我的图层吗
- 我想从另一个帐户使用一个公开可用的层吗
尝试使用
使用图层有两大好处
- 它允许您在一个地方部署基本依赖项并集中管理它们
- 它缩小了Lambda应用程序部署的大小。不再需要每次上载大量的
节点\u模块
文件夹层次结构
如何使用它们?这是一个相当深入的话题,但要点是你可以:
在AWS中构建和部署一个层。一个图层只不过是一个“裸”的npm项目,真的。您可以在其中安装常用的NodeJS模块,而不安装其他模块
假设您使用无服务器应用程序模型来部署AWS Lambda函数,则可以将Lambda函数配置为使用层。下面是SAM yaml文件的精简版本,说明了这一点:
AWSTemplateFormatVersion:'2010-09-09'
转换:“AWS::Serverless-2016-10-31”
描述:我的无服务器应用程序
参数:
# ...
全球:
功能:
运行时:nodejs10.x
#环境:
#变量:
#节点环境:测试
资源:
CommonDependenciesLayer:
类型:AWS::Serverless::LayerVersion
特性:
LayerName:我的常见缺点
描述:my NodeJS应用程序的常见依赖项
ContentUri:../common deps/
保留政策:保留
元数据:
构建方法:nodejs10.x
performSomeFunction:
类型:“AWS::Serverless::Function”
特性:
FunctionName:performSomeFunction
处理程序:lambda.someFunction
层:
#您可以像这样引用此SAM文件中定义的图层。
# - !参考CommonDependenciesLayer
# ... 也可以硬编码外部ARN
#-arn:aws:lambda:us-east-1:nnnnnnn:layer:myapp公共部门:5
代码URI:/
# ...
在Lambda代码中,只需使用正常的CJS require语法即可。例如,假设我将mysql
库放在上面的CommonDependenciesLayer
中。只要Lambda函数指向SAM文件中的层,我所要做的就是在代码中require('mysql')
。它会在那儿的
当它开始工作时,有一些关于层部署的微妙之处需要考虑
- 是否每次都要构建层?(可能不会,但我建议您在学习层和lambda如何协同工作时这样做)
- 我的图层组件多久更改一次
- 我想公开我的图层吗
- 我想从另一个帐户使用一个公开可用的层吗