Après avoir trouvé une réponse qui ne fonctionne nulle part ailleurs sur Internet, je soumets ce tutoriel demander et répondre moi-même
Comment puis-je obtenir un processus PhantomJS
simple exécuté à partir d'un script NodeJS
sur AWS Lambda
? Mon code fonctionne bien sur ma machine locale, mais je rencontre des problèmes différents en essayant de l'exécuter sur Lambda.
EDIT: Cela ne fonctionne plus . Ceci est une solution apparente .
Voici un exemple de code complet d'un processus PhantomJS
simple, qui est lancé en tant que NodeJS
child_process
. Il est également disponible sur github .
index.js
var childProcess = require('child_process');
var path = require('path');
exports.handler = function(event, context) {
// Set the path as described here: https://aws.Amazon.com/blogs/compute/running-executables-in-aws-lambda/
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
// Set the path to the phantomjs binary
var phantomPath = path.join(__dirname, 'phantomjs_linux-x86_64');
// Arguments for the phantom script
var processArgs = [
path.join(__dirname, 'phantom-script.js'),
'my arg'
];
// Launc the child process
childProcess.execFile(phantomPath, processArgs, function(error, stdout, stderr) {
if (error) {
context.fail(error);
return;
}
if (stderr) {
context.fail(error);
return;
}
context.succeed(stdout);
});
}
phantom-script.js
var system = require('system');
var args = system.args;
// Example of how to get arguments passed from node script
// args[0] would be this file's name: phantom-script.js
var unusedArg = args[1];
// Send some info node's childProcess' stdout
system.stdout.write('hello from phantom!')
phantom.exit();
Pour obtenir un binaire PhantomJS qui fonctionne avec les machines Linux d'Amazon, accédez à la Page Bitbucket de PhantomJS et téléchargez phantomjs-1.9.8-linux-x86_64.tar.bz2
.
Une solution générique consiste à utiliser une machine AWS Linux réelle pour installer les modules npm et les transférer vers votre exécutable lambda. Voici les étapes:
scp
Voici un tutoriel avec des liens vers d'autres ressources: Compiler les bibliothèques de modules de nœuds pour AWS Lambda
Cela fonctionne également dans de tels cas lorsque PhantomJS est une dépendance d'un autre module de nœud, par exemple. node-webshot et vous avez moins d'influence sur ce qui est installé.