1

我有一个 lambda 表达式,可以在 localhost 上与无服务器一起正常工作。

但是使用 lambda 进行部署时,出现以下错误:

"errorMessage": "/var/lang/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/task/node_modules/scrypt/build/Release/scrypt.node)",
  "errorType": "Error",
  "stackTrace": [
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)",
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)",
    "Object.<anonymous> (/var/task/node_modules/scrypt/index.js:3:20)",
    "Module._compile (module.js:570:32)",
    "Object.Module._extensions..js (module.js:579:10)",
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)",
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)",
    "Object.<anonymous> (/var/task/node_modules/scrypt.js/node.js:1:76)",
    "Module._compile (module.js:570:32)",
    "Object.Module._extensions..js (module.js:579:10)",
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)",
    "Module.require (module.js:497:17)"
  ]

我一直无法找到有关此的任何信息,那么,有人能够提供有关此方面的帮助吗?

4

2 回答 2

1

根据AWS 文档

原生模块的安装和部署方式类似,但您需要针对 Amazon Linux 库构建它们。

因此,启动一个 EC2 实例,在那里构建您的项目,将其压缩,然后将其上传到 Lambda。不过,您使用的 Amazon Linux AMI 似乎有所不同……可能是因为它们是不同的架构或具有不同的库版本或其他东西。在我的情况下(使用 x509 模块构建 NodeJS 项目),Amazon Linux 2 AMI (ami-922914f7) 不起作用;它导致了与您的错误非常相似的错误。如果您尝试这个但它不起作用,请尝试在原始 Amazon Linux AMI (ami-2a0f324f) 上重新构建它。在我这样做之后,它在 Lambda 中完美运行。

感谢@Tommaso 提供此解决方案背后的灵感。

于 2018-05-23T00:05:25.147 回答
0

当您在具有不同架构的系统上打包节点依赖项时会发生这种情况(由于某些依赖项具有在您的系统中编译的与 AWS Lambda 不同的本机代码)

在将模块上传到 AWS 之前打包模块之前,运行docker run -v "$PWD":/var/task lambci/lambda:build-nodejs6.10而不是在类似 AWS Lambda 的环境中设置依赖项。npm install

于 2017-12-21T13:22:22.340 回答