在 AWS Lambda 上使用 nodejs "ref" 模块时"invalid ELF header"



我刚刚将邮政编码上传到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实例。

  • 使用nvmdocker安装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   
},

最新更新