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?
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.
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/