Partage

AWS Lambda Puppeteer

14 juin 2018 à 6:43:51

Bonjour/bonsoir,

Est-ce que quelqu'un parmi vous a déjà installer Puppeteer sur AWS Lambda ?

L'idée de base est de créer un WebService sur AWS Lambda qui prend des screenshot avec Puppeteer.

Pas vraiment de problème au niveau de la programmation que sa soit de NodeJS ou l'utilisation de Puppeteer. J'ai déjà utiliser Puppeteer et nodejs en locale avec utilisation de mon navigateur chrome par le passé.

La ou je bloque/n'est pas sur c'est que après plusieurs recherches il y a plusieurs façons de faire et il existe aussi plusieurs git:
- Quel est le meilleur Git a utiliser pour déployer Puppeteer ?
Voici une liste non exhaustive:
https://github.com/sambaiz/puppeteer-lambda-starter-kit ( probablement celui qui va être testé )
https://github.com/Kikobeats/aws-lambda-chrome ( browserless )

https://github.com/deathemperor/puppeteer-lambda-starter-kit
https://github.com/danielsantiago/puppeteer-lambda-starter-kit

https://github.com/sean-hill/aws-puppeteer-lambda

Aussi ce qui me reste à trouver/tester:
-- Le tout va être probablement relié à un bucket sur S3 pour enregistrer les images. Probablement simple. Déjà utiliser les buckets et il semble y avoir un SDK NodeJs aws pour faire le tout. Il y a d'ailleurs un exemple ici en commentaire: https://github.com/sambaiz/puppeteer-lambda-starter-kit/blob/master/src/index.js

-- Il semble qu'il y a un problème d'espace des fichiers temporaire. https://github.com/sean-hill/aws-puppeteer-lambda semble offrir une solution aucune idée si c'est la bonne façon de faire.

-- Trouver un exemple qui n'utilise pas beaucoup de IoT qui peux coûter assez chère au final: https://github.com/prismagraphql/chromeless/issues/227

-- Note: Ne pas oublier d'utiliser waitUntil comme dans l'exemple https://github.com/sambaiz/puppeteer-lambda-starter-kit/blob/master/src/index.js . Voir si networkidle2 ne convient pas mieux que networkidle0.


Au final, il va surement être nécessaire de tester tous les Git mais si vous pouvez m'éviter cela.

merci

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
18 juin 2018 à 22:58:51

Petit up, je ne suis pas pressé vu que c'est un projet à temps perdu.
12 juillet 2018 à 0:41:10

Dernier petit up après je vais tenté d'installer le tout et vous revenir la dessus.
23 août 2018 à 4:43:47

Petit update:

Depuis la semaine passé a temps perdu j'essaie de faire fonctionné le tout sans succès.

J'ai tenté d'installer:

https://github.com/sambaiz/puppeteer-lambda-starter-kit

et

https://github.com/deathemperor/puppeteer-lambda-starter-kit

Les 2 m'affiches:

""errorMessage": "Failed to launch chrome! spawn /tmp/headless_shell ENOENT\n\n\nTROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md\n","

Après une discussion sur: https://github.com/GoogleChrome/puppeteer/issues/323

ils m'ont suggéré de fixé la version à 1.1.1 pour puppeteer. Même erreur encore une fois.

Quelques packages testé:
https://www.dropbox.com/s/diqi8gtvv40ez8i/sambaiz-original-puppeteer-1.1.1.zip?dl=0
https://www.dropbox.com/s/pyurmg3peiw7hya/sambaiz-original-puppeteer-1.1.1-with-index-change.zip?dl=0

Configuration AWS:

J'utilise "Upload a file from Amazon S3" option car avec le UI sa fini toujours en timeout. Testé aussi en ligne de commande avec l'utilitaire AWS qui fait un timeout lui aussi.
Runtime: Node.js 8.10
Handler: index.handler
Executable role: lambda_basic_execution. J'ai aussi essayé avec un autre usager qui a les droits complet sur S3 et Lambda.
TimeOut: 30 sec
Memory: 3008 mb.

Aussi pour le package je suis sur Windows 7 donc pour utiliser "npm run package" plusieurs modifications ont dut être faite au package.json ainsi que des manipulations manuel.

Bientôt je vais ouvrir un sujet sur stackoverflow mais bon si quelqu'un a déjà passé par la sa serai très apprécié. J'ai tenté beaucoup de choses, différentes version etc...

merci

29 août 2018 à 3:24:28

Finalement, j'ai réussi à déployer le package avec la dernière version stable de chronium( HeadlessChrome/68.0.3440.106 ) et la dernière version de puppeteer( 1.7.0 )

Package:

https://www.dropbox.com/s/p4t7zod2nf97cwn/sambaiz-puppeteer.zip?dl=0

Si vous voulez créer votre package et vous êtes sur windows:

{
  "name": "puppeteer-lambda-starter-kit",
  "version": "1.1.2",
  "description": "Starter Kit for running Headless-Chrome by Puppeteer on AWS Lambda",
  "scripts": {
    "package": "npm run package-prepare",
    "package-prepare": "npm run babel && copy package.json dist && cd dist && npm config set puppeteer_skip_chromium_download true -g && npm install --production",
    "babel": "mkdir dist && \"./node_modules/.bin/babel\" src --out-dir dist",
    "local": "npm run babel && copy node_modules dist && node dist/starter-kit/local.js",
    "package-nochrome": "npm run package-prepare && cd dist && zip -rq ../package.zip ."
  },
  "dependencies": {
    "babel": "^6.23.0",
    "puppeteer": "^1.1.1",
    "tar": "^4.0.1"
  },
  "devDependencies": {
    "aws-sdk": "^2.111.0",
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.6.0"
  }
}




  • Changer la version de node dans .babelrc par 8.10
  • npm install babel ( Si babel n'est pas déjà installé )
  • npm run package
  • Copier chrome/headless_shell-67.0.3361.0.tar.gz dans le dossier dist
  • Renommer dist/headless_shell-67.0.3361.0.tar.gz par headless_shell.tar.gz
  • Ziper le contenu du dossier dist et vous avez votre package prêt a être utiliser sur lambda



AWS Lambda Puppeteer

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown