在AWS Lambda

时间:2015-05-01 20:13:42

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

我刚刚向AWS Lambda上传了一个zip,其中包含“ref”(https://www.npmjs.com/package/ref),这是验证iOS Game Center身份验证令牌(How to authenticate Game Center User from 3rd party node.js server)所必需的。

不幸的是,调用它会导致“无效的ELF标头”错误,

{
  "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上开发的,在本地运行代码没有问题。谷歌搜索“无效的ELF标题”几乎没有知道相关的结果,我真的不知道从哪里去。我是否可以在node.js区域更好地询问这个问题,或者这是相关领域,因为它可能是平台的问题?

2 个答案:

答案 0 :(得分:0)

这并不完全适用于您的问题,但是如果有人在使用AWS Elastic Beanstalk时偶然发现了该问题,则可能是由于将.ebignore目录以及其他所有内容一起上传的结果,因此您需要强制执行忽略文件。

node_modules/

buildTypes {
    release {
        // Enables code shrinking, obfuscation, and optimization for only
        // your project's release build type.
        minifyEnabled true


        // Includes the default ProGuard rules files that are packaged with
        // the Android Gradle plugin. To learn more, go to the section about
        // R8 configuration files.
        proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'),
                'proguard-rules.pro'

       }
}

答案 1 :(得分:0)

这是我在 Reddit 上找到的您问题的答案:

[由 JeffGebhart 解决] https://hub.docker.com/r/lambci/lambda/

然后通过 SSH 连接到运行 Amazon Linux 2 的 EC2 实例。

  • 使用 npmnvm 安装 docker 并运行
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 中构建证明者原生模块。现在,您可以将所有文件提取到您的 PC 或 AWS。