Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js AWS Lambda:NodeJs自定义层_Node.js_Aws Lambda_Aws Lambda Layers - Fatal编程技术网

Node.js AWS Lambda:NodeJs自定义层

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

我是nodejs和aws lambda的新手。我正在尝试为我的lambda函数组创建一个带有公共函数的层。 在lambda处理程序中,自定义模块的导入具有以下定义:
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如何协同工作时这样做)
    • 我的图层组件多久更改一次
    • 我想公开我的图层吗
    • 我想从另一个帐户使用一个公开可用的层吗