我可以在AWS Lambda中使用WebWorkers(节点6.10)

时间:2017-04-28 23:57:23

标签: node.js amazon-web-services aws-lambda aws-sdk web-worker

我在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编译过程进行停靠。

https://medium.com/@james_mtc/how-to-unsuck-aws-lambdas-native-compilation-for-nodejs-functions-with-docker-and-bash-5301a26a19b1

1 个答案:

答案 0 :(得分:1)

You need to build the native modules on an Amazon AMI使用静态库而不是共享/动态库。对于某些软件包,将模块从共享更改为静态可能并非易事。

  

本机模块的安装和部署类似,但您需要   针对Amazon Linux库构建它们。你需要   要么确保库及其传递依赖性   静态编译或使用rpath风格的链接;我们会做静态的   在这篇文章中的方式,并演示在后续帖子中使用rpath。   (请注意,许多(但不是全部)库可以静态链接到此   方式。)