AWS lambda中的C 错误

c++ error in AWS lambda?

本文关键字:错误 中的 lambda AWS      更新时间:2023-10-16

我有一个lambda表达式,可与Localhost上的无server -nocal -ploss.

一起使用。

但是在使用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)"
  ]

我找不到有关此的任何信息,所以有人能为此提供帮助吗?

根据AWS文档,

本机模块类似地安装和部署,但是您需要 要与Amazon Linux库建立它们。

因此,请旋转一个EC2实例,在那里构建您的项目,将其拉链,然后将其上传到Lambda。您使用的Amazon Linux AMI似乎有所作为……可能是因为它们是不同的架构或具有不同的库版本或其他内容。在我的情况下(使用X509模块构建Nodejs项目),Amazon Linux 2 AMI(AMI-922914F7)无效;导致错误与您的错误非常相似。如果您尝试此操作并且不起作用,请尝试在原始的Amazon Linux AMI(AMI-2A0F324F)上重新构建它。我这样做之后,它在lambda中完美运行。

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

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

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