4

Je rencontre un problème lors du chargement d'un module de noeud dans AWS Lambda à l'aide de Serverless Framework. L'un de mes packages de nœuds utilise des bibliothèques natives. J'ai donc utilisé un EC2 pour créer les dossiers node_module, puis les ai copiés dans mon projet Serverless. Tout fonctionne si je manuellement la fermeture éclair du projet et télécharger sur AWS Lambda, mais si j'utilise serverless deploy sans artefact spécifié, je reçois une erreur sur le module (en particulier: ELF file's phentsize not the expected size concernant un fichier .node)Serverless NodeJS/Native node_modules

J'ai essayé d'ajouter excludeDevDependencies: false ce qui rend le déploiement plus important mais me donne toujours l'erreur. Actuellement, cela fonctionne uniquement si je compresser le contenu du dossier de projet et spécifier ce fichier comme artefact à télécharger. Existe-t-il un moyen différent de déployer un module de noeud avec des liaisons natives avec Serverless? MISE À JOUR: Après avoir désactivé l'exclusion des dépendances de développement, empaquetant en utilisant serverless package et examinant le fichier zip développé sans serveur crée, j'ai découvert que les tailles de fichier des fichiers .o et .a sont différentes dans la version empaquetée par rapport à la original. Est-ce normal?

enter image description here

+0

vos bibliothèques natives sont .so? –

+0

Je ne pense pas que le problème soit lié aux bibliothèques elles-mêmes, mais plutôt à l'exécution de 'serverless deploy' comme cela fonctionne si je les copie manuellement. – arvinkx

+1

Je vois ça aussi. Le test avec un fichier d'image dans un module de noeud, 'packageless server' suivi d'un dézippage produit une image que je ne peux pas ouvrir, alors que zipping et unzipping fonctionne bien comme prévu. –

Répondre

0

Depuis Lambda fonctionne sur un conteneur Linux, vous devriez être en cours d'exécution serverless deploy d'une machine Linux. De cette façon, vos modules natifs seront compilés pour votre architecture cible qui est Linux.

Pour vérifier le package de déploiement qui serverless crée, vous pouvez utiliser sls package ou sls deploy --noDeploy (pour les versions antérieures) et inspectez le répertoire .serverless qu'il crée. Vous verrez un fichier zip ici, extrayez son contenu et testez le code à partir de là.

Si le contenu de ce zip n'est pas ce que vous attendez (pas le même que lorsque vous les copiez manuellement), alors peut-être que quelque chose ne va pas avec votre structure de fichier et/ou serverless.yml.

+0

Lors de l'exécution de 'serverless deploy', est-ce qu'il exécute' npm install' à nouveau? J'étais sous l'hypothèse qu'il a juste zippé les fichiers dans le répertoire (car c'est ce que la documentation indique). – arvinkx

+0

Votre hypothèse est correcte. 'deployless server' juste zips le répertoire. – dashmug

+0

Je suppose qu'il y a un problème avec votre 'serverless.yml' et votre structure de projet (ils ne correspondent pas). Si vous pouvez montrer votre 'serverless.yml' et votre structure d'arborescence de projet ce serait génial. – dashmug