小编S. *_*win的帖子

未找到共享 Nodejs 代码的 SAM Lambda Layer 模块

我在单个 template.yaml 中定义多个 lambda 函数。这些函数有一些通用代码,但没有发布模块。我以为我可以将这些常见的东西变成版本化层。加上一个目录效果如下:

  • 项目
    • LambdaFunc1
      • 包.json
      • 节点模块
      • func1.js
    • Lambda函数2
      • 包.json
      • 节点模块
      • func2.js
    • 常见的东西
      • 包.json
      • my-common.js
    • 模板.yaml
    • 节点模块

测试后,我将 common-stuff 复制到 Projects/node_modules 目录中,而我的其他 LambdaFuncs 根据 Node 向上移动未找到模块的目录结构来解析 require('common-stuff') 。

为了让 SAM 进行构建/打包/部署,我注意到 SAM 没有触及常见内容,而是使用其他两个 Lambda 函数创建了 .aws-sam/build 结构。我必须为 SAM 的 CodeURI 创建一个结构才能压缩。

Package/common-stuff/packaged/nodejs/node_modules/common-stuff/ 与我的 package.json 和 my-common.js。我的 package.json 使用名称:“common-stuff”,主要:“my-common.js”

没有其他文件——nodejs 下没有任何文件,因为我只打包模块。在我看来,这就是层的原因。我已经通过下载 Layer zip 文件验证了 SAM 打包了一个包含 nodejs/node_modules/common-stuff/... 的 zip 文件。

在 Lambda 函数模板 def 中,我添加了允许“lambda:GetLayerVersion”的权限。当我在控制台中查看 Lambda 函数时,我会看到此权限以及其他权限。

有趣的是,aws lambda get-layer-version-policy --layer-name MyLayer --version-number 8 --output text 返回没有附加策略的错误。我的猜测是,这是因为我已将其直接添加到函数中,正如我在 Lambda 函数上看到的那样,具有正确的Allow/GetLayerVersion。 …

layer amazon-web-services node.js aws-lambda serverless-application-model

5
推荐指数
0
解决办法
908
查看次数