nodejs Lambda函数中的AWS-SDK无法找到终端缓存模块

时间:2019-04-22 20:07:07

标签: amazon-web-services aws-lambda aws-sdk

我一直在重构一些我们的AWS lambda函数,而在这个最新版本中,我遇到以下错误:

"Payload": "{\"errorMessage\":\"Cannot find module '../vendor/endpoint-cache'\",\"errorType\":\"Error\",\"stackTrace\":[\"Function.Module._load (module.js:474:25)\",\"Module.require (module.js:596:17)\",\"require (internal/module.js:11:18)\",\"Object.<anonymous> (/var/task/node_modules/aws-sdk/lib/core.js:76:18)\",\"Module._compile (module.js:652:30)\",\"Object.Module._extensions..js (module.js:663:10)\",\"Module.load (module.js:565:32)\",\"tryModuleLoad (module.js:505:12)\",\"Function.Module._load (module.js:497:3)\"]}"

此模块在aws-sdk节点模块的vendor文件夹中。 我检查了部署工件,以确保该文件夹存在,并且尝试将其降级到以前使用的旧版本的aws-sdk。

package.json中的依赖项:

"dependencies": {
    "aws-sdk": "^2.59.0",
    "moment": "^2.22.2",
    "underscore": "^1.8.3"
  },

构建服务器先运行npm-install,然后运行

$path = Get-Location
$thisProject = "$($path)\pathToProject\*"

Compress-Archive -Path $thisProject -DestinationPath thisProject.zip

在此方面停留了一段时间,因此非常感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

几个月前,我遇到了这个问题。原来,我需要确保项目中包括了软件包锁定文件,并且设置了aws-sdk版本

答案 1 :(得分:2)

昨天我遇到了这个问题,我通过删除aws-sdk中的package.json并删除并重新安装node_modules文件夹来解决了这个问题。希望这能解决您的问题。

我认为默认情况下已经包含aws-sdk

答案 2 :(得分:0)

在Lambda函数中指定所需SDK的推荐方法是使用所需版本创建lambda层。看到这里:https://aws.amazon.com/blogs/compute/working-with-aws-lambda-and-lambda-layers-in-aws-sam/

答案 3 :(得分:0)

我实际上遇到了同样的问题。就我而言,原因是在Windows上运行的Compress-Archive函数中。如果我将lambda与Compress-Archive一起打包,则Lambda调用将失败,并出现上述问题。但是,如果我解压缩.zip并与常规Windows一起“发送到压缩目录”,则一切正常。我发现了一些similar issue in PowerShell github space,这让我觉得这是一个普遍的问题。

该问题已在PowerShell Core的最新版本之一中解决(不确定经典PowerShell)。我不确定是否可以解决此问题的确切版本,但是它在v.6.1和v.6.2.2中已经消失了。