找不到共享Node.js代码的SAM Lambda Layer模块

时间:2019-10-10 02:53:23

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

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

  • 项目
    • LambdaFunc1
      • package.json
      • node_modules
      • func1.js
    • LambdaFunc2
      • package.json
      • node_modules
      • func2.js
    • 普通物品
      • package.json
      • my-common.js
    • template.yaml
    • node_modules

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

要让SAM进行构建/打包/部署,我注意到SAM不会碰到普通事物,但是会与其他两个Lambda函数一起创建.aws-sam / build结构。我必须为SAM的CodeURI创建一个结构以进行压缩。

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

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

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

有趣的是,aws lambda get-layer-version-policy --layer-name MyLayer --version-number 8-输出文本 返回没有附加策略的错误。我的猜测是,因为我已将其直接添加到函数中,就像我在Lambda函数上看到的那样,使用了正确的Allow / GetLayerVersion。

这似乎可以满足我所读的内容,但是Node找不到该模块。 CloudWatch日志只是说它找不到模块,与权限或语法无关。此外,这些功能一直有效,直到我添加了Layer方法。

'sam local start-api'也不起作用,同样的错误。当我在Windows 10默认层缓存目录C:\ Users \ me \ AppData \ Roaming \ AWS SAM \中查找时,有一个空的layers-pkg目录。

我还缺少其他魔术吗?是否有更好的方法在Node Lambda函数之间共享通用代码?

我无法确定AWS是否无法获取图层,或者zip结构错误,或者require('common-stuff')是否不同(希望没有)。

斯科特

0 个答案:

没有答案