我在AWS lambda中有一个非常简单的节点模块,并为某些文本处理导入了“Natural”。
此行抛出错误:
var n = require('natural');
错误是这样的:
{
"errorMessage": "/var/task/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: invalid ELF header",
"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)",
"bindings (/var/task/node_modules/bindings/bindings.js:76:44)",
"Object.<anonymous> (/var/task/node_modules/webworker-threads/index.js:1:105)",
"Module._compile (module.js:570:32)"
]
}
然后返回
{
"message": "Internal server error"
}
AWS lambda不运行webworkers吗?我已经尝试完全使用nvm 6.10进行编译并重建了zip文件,但无济于事。我需要在zip中包含其他内容以确保aws lambda env支持webworker模块吗?
编辑:(已解决) 我编写了一个很长的教程和博客,其代码用于对Native编译过程进行停靠。
答案 0 :(得分:1)
You need to build the native modules on an Amazon AMI使用静态库而不是共享/动态库。对于某些软件包,将模块从共享更改为静态可能并非易事。
本机模块的安装和部署类似,但您需要 针对Amazon Linux库构建它们。你需要 要么确保库及其传递依赖性 静态编译或使用rpath风格的链接;我们会做静态的 在这篇文章中的方式,并演示在后续帖子中使用rpath。 (请注意,许多(但不是全部)库可以静态链接到此 方式。)