web-dev-qa-db-fra.com

Comment installer phantomjs sur AWS lambda?

J'ai trouvé un projet de 4 ans qui est censé installer phantomjs sur lambda, mais soit je fais quelque chose de mal, soit les choses ont changé depuis la création du dépôt et cela ne fonctionne plus. Lorsque je clone et déploie ce référentiel, j'obtiens cette erreur en essayant d'exécuter phantomjs:

{
  "errorType": "Error",
  "errorMessage": "write EPIPE",
  "code": "EPIPE",
  "stack": [
    "Error: write EPIPE",
    "    at WriteWrap.afterWrite [as oncomplete] (net.js:779:14)"
  ],
  "errno": "EPIPE",
  "syscall": "write"
}

{
  "errorType": "Error",
  "errorMessage": "html-pdf: Received the exit code '127'\n./phantomjs_lambda/phantomjs_linux-x86_64: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory\n",
  "stack": [
    "Error: html-pdf: Received the exit code '127'",
    "./phantomjs_lambda/phantomjs_linux-x86_64: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory",
    "",
    "    at ChildProcess.respond (/var/task/node_modules/html-pdf/lib/pdf.js:121:31)",
    "    at ChildProcess.emit (events.js:189:13)",
    "    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)"
  ]
}

Si j'utilise le dernier binaire linux au lieu de celui fourni avec ce dépôt, j'obtiens une erreur différente mais similaire à propos d'un fichier .so différent manquant.

Pour le contexte, la raison pour laquelle je veux installer phantomjs est parce que je veux utiliser le nœud bibliothèque html-pdf dans mon lambda.

Je suis sur un Mac.

En guise de réponse, je ne cherche pas à dépasser cette erreur spécifique pour découvrir la suivante. Je cherche une réponse qui me donne un fantôme de travail sur aws lambda. S'il existe un autre nœud de bibliothèque "html en pdf"/"html en png" qui ne nécessite pas de phantomjs pour fonctionner et s'exécute facilement sur AWS Lambda, ce serait également une solution acceptable.

4
Daniel Kaplan

Selon votre erreur de journal, il semble que libfreetype.so.6 soit absent de votre runtime d'exécution lambda.

Vous devrez peut-être créer une couche lambda personnalisée incorporant cette bibliothèque partagée. Par la suite, vous devrez peut-être mettre à jour votre LD_LIBRARY_PATH afin qu'il pointe également vers le répertoire de la bibliothèque partagée. Vous pouvez également l'inclure alternativement dans votre package de déploiement lambda.

Selon le document officiel d'AWS:

Pour inclure des bibliothèques dans une couche, placez-les dans l'un des dossiers pris en charge par votre runtime.

Tous - bin (PATH), lib (LD_LIBRARY_PATH)

Lien ici: https://docs.aws.Amazon.com/lambda/latest/dg/configuration-layers.html

Assurez-vous d'intégrer un libfreetype.so.6 compilé pour Amazon linux (ou Amazon linux 2).

Runtimes d'exécution ici: https://docs.aws.Amazon.com/lambda/latest/dg/lambda-runtimes.html

Bonne chance !

1
greyside