AWS Lambda 因 NodeJS 依赖项而失败
AWS Lambda fails with NodeJS Dependencies
我在执行带有依赖项的 NodeJS Lambda 函数时收到以下错误。 运行 在 MacOSX High Sierra v10.13.3 Beta 上使用 NPM v5.6.0 的 NodeJS v8.4.0。
"errorMessage": "/var/task/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: invalid ELF header",
"errorType": "Error",
"stackTrace": [
"Object.Module._extensions..node (module.js:597:18)",
"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:81:44)",
"Object.<anonymous> (/var/task/node_modules/webworker-threads/index.js:1:105)",
"Module._compile (module.js:570:32)"
]
我已将其缩小到“natural" module which requires the WebWorkerThreads 触发错误的模块。下面是我的依赖项。
"dependencies": {
"natural": "^0.5.6",
"path": "^0.12.7"
}
我已经在 AWS Forums 上提出了这个问题但没有答案,非常感谢堆栈溢出社区可以提供的任何帮助。我已经完成了谷歌搜索并找到了以下答案。不过,我没有使用自定义模块或 Docker。
一些 npm 模块使用在您执行 npm install
时正在编译的本机二进制文件。这些已编译的二进制文件仅 运行 在它们被编译的 OS/platform 上。
由于上述原因,您在 MacOS 上编译的那些本机依赖项将一旦上传到 AWS Lambda 就不会工作,因为 Lambda 运行s 在 Linux.
要解决您的问题,您需要在 Linux 机器上创建 Lambda 部署包(包括 npm install
)。您有几种方法可以做到这一点:
使用 Linux 虚拟机(例如 Virtualbox 或 Parallels)并从该虚拟机内部执行 npm install
。
使用vagrant
。与数字 1 相同。
使用docker
。还是很像1号和2号。
或者,直接使用纯JS依赖,一开始就不会出现上面的问题。许多原生 npm 模块现在都有纯 JS 替代品。
我在执行带有依赖项的 NodeJS Lambda 函数时收到以下错误。 运行 在 MacOSX High Sierra v10.13.3 Beta 上使用 NPM v5.6.0 的 NodeJS v8.4.0。
"errorMessage": "/var/task/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: invalid ELF header",
"errorType": "Error",
"stackTrace": [
"Object.Module._extensions..node (module.js:597:18)",
"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:81:44)",
"Object.<anonymous> (/var/task/node_modules/webworker-threads/index.js:1:105)",
"Module._compile (module.js:570:32)"
]
我已将其缩小到“natural" module which requires the WebWorkerThreads 触发错误的模块。下面是我的依赖项。
"dependencies": {
"natural": "^0.5.6",
"path": "^0.12.7"
}
我已经在 AWS Forums 上提出了这个问题但没有答案,非常感谢堆栈溢出社区可以提供的任何帮助。我已经完成了谷歌搜索并找到了以下答案。不过,我没有使用自定义模块或 Docker。
一些 npm 模块使用在您执行 npm install
时正在编译的本机二进制文件。这些已编译的二进制文件仅 运行 在它们被编译的 OS/platform 上。
由于上述原因,您在 MacOS 上编译的那些本机依赖项将一旦上传到 AWS Lambda 就不会工作,因为 Lambda 运行s 在 Linux.
要解决您的问题,您需要在 Linux 机器上创建 Lambda 部署包(包括 npm install
)。您有几种方法可以做到这一点:
使用 Linux 虚拟机(例如 Virtualbox 或 Parallels)并从该虚拟机内部执行
npm install
。使用
vagrant
。与数字 1 相同。使用
docker
。还是很像1号和2号。
或者,直接使用纯JS依赖,一开始就不会出现上面的问题。许多原生 npm 模块现在都有纯 JS 替代品。