我刚刚将邮政编码上传到AWS lambda,其中包括" ref"(https://www.npmjs.coms.com/package/ref),这是验证iOS的需要游戏中心身份验证令牌(如何从第三方node.js服务器身份验证游戏中心用户)。
不幸的是,它会导致"无效的精灵标头"错误,
{
"errorMessage": "/var/task/node_modules/ref/build/Release/binding.node: invalid ELF header",
"errorType": "Error",
"stackTrace": [
"Module.load (module.js:356:32)",
"Function.Module._load (module.js:312:12)",
"Module.require (module.js:364:17)",
"require (module.js:380:17)",
"bindings (/var/task/node_modules/ref/node_modules/bindings/bindings.js:76:44)",
"Object.<anonymous> (/var/task/node_modules/ref/lib/ref.js:5:47)",
"Module._compile (module.js:456:26)",
"Object.Module._extensions..js (module.js:474:10)",
"Module.load (module.js:356:32)",
"Function.Module._load (module.js:312:12)"
]
}
这是在运行Yosemite的64位MacBook Pro上开发的,该官员在本地运行代码没有问题。谷歌搜索"无效的小精灵头"几乎没有任何相关结果,我真的不确定从这里去哪里。我会更好地在node.js区域询问这个问题,还是这是相关区域,因为它可能是平台的问题?
当您在一个架构上构建时,然后尝试在其他体系结构上使用相同的插件(在某些情况下)。
根据此页面,可能必须针对EC2上的Amazon Linux图像编译Addons,以使编译的插件在其lambda服务上可用。
这并不完全适用于您的问题,但是如果使用AWS弹性beanstalk时任何人偶然发现此问题,这可能是由于上传node_modules/
目录以及其他所有内容的结果您需要强迫它忽略文件。
.ebignore
node_modules/
这是我在reddit上发现的问题的答案:
[由Jeffgebhart解决]https://hub.docker.com/r/lambci/lambda/
然后SSH进入运行Amazon Linux 2的EC2实例。
- 使用
nvm
和docker
安装npm
并运行
docker pull lambci/lambda
- 运行
mkdir LambdaFunction
- 运行
npm init
并初始化所有内容。
- 然后您需要在该文件夹中运行
docker run --rm -v "$PWD":/var/task lambci/lambda:build-nodejs12.x
npm install <packages you need>
它将在node_modules
中构建prover本机模块。现在,您可以将所有文件提取到您的PC或AWS。
对于那些开发人员将JS移植到lambda上的Typescript,请确保导入所有依赖项,而不是必需:
import $ from "cheerio";
不是
const $ = require("cheerio");
再次,对于接近此问题的人,请尝试单独包装您的功能:
serverless.ts/.yml
blockquote
package: {
individually: true
},