web-dev-qa-db-fra.com

"en-tête ELF non valide" lors de l'utilisation du module "ref" de nodejs sur AWS Lambda

Je viens de télécharger un Zip sur AWS Lambda qui comprenait la "ref" ( https://www.npmjs.com/package/ref ), qui est nécessaire pour valider un jeton d'authentification iOS Game Center ( Comment authentifier l'utilisateur Game Center à partir d'un serveur node.js tiers ).

Malheureusement, son invocation entraîne l'erreur "En-tête ELF non valide",

{
  "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)"
  ]
}

Cela a été développé sur un Macbook Pro 64 bits exécutant Yosemite qui n'a aucun problème à exécuter le code localement. La recherche de "l'en-tête ELF invalide" a donné peu de résultats pertinents et je ne sais vraiment pas où aller à partir d'ici. Serais-je mieux de poser cette question dans une zone node.js, ou est-ce la zone pertinente, car cela pourrait être un problème avec la plate-forme?

24
seaders

Cela se produit lorsque vous construisez sur une architecture, puis essayez d'utiliser le même module complémentaire construit sur une architecture différente (ou plate-forme dans certains cas).

Selon cette page , les addons peuvent devoir être compilés sur une image Amazon Linux sur EC2 pour que les addons compilés soient utilisables sur leur service Lambda.

46
mscdex

Cela ne s'applique pas exactement à votre question, mais au cas où quelqu'un tomberait dessus lors de l'utilisation d'AWS Elastic Beanstalk, cela pourrait être le résultat du téléchargement du node_modules/ répertoire avec tout le reste, vous devez donc le forcer à ignorer le fichier.

.ebignore

node_modules/
0
Matt Fletcher