2016-01-06 19 views
15

在互联网上没有找到工作的答案其他地方后,我提出这个问一答,自己教程如何在AWS的λ运行PhantomJS用的NodeJS

我怎样才能得到一个简单的PhantomJS过程从NodeJS脚本AWS Lambda运行?我的代码在我的本地机器上工作正常,但遇到了试图在Lambda上运行它的不同问题。

回答

25

这是一个简单的PhantomJS进程的完整代码示例,该进程作为NodeJSchild_process启动。 It is also available on 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); 
    }); 
} 

幻象的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(); 

要获得PhantomJS二进制与亚马逊的Linux机器的工作,去了PhantomJS Bitbucket Page并下载phantomjs-1.9.8-linux-x86_64.tar.bz2

+1

梦幻般的答案@泰勒。 –

+0

@Tyler在同样的我执行我的代码。一切都很顺利,只是它展示了我在完成前退出的过程。我可以知道是什么造成这个问题? – Vikas

3

一个通用的解决方案是使用实际的AWS Linux机器安装npm模块并将它们传输到您的lambda可执行文件。以下是具体步骤:

  1. 自旋向上的EC2实例
  2. ssh进入EC2
  3. 安装节点+ NPM
  4. 安装所需的NPM模块
  5. 压缩起来
  6. 他们送到你本地计算机与scp
  7. 解压缩并复制到您的lambda函数的npm_modules文件夹(不要在本地安装npm!)
  8. 上传你的代码,以拉姆达

这里是一个环节,进一步资源教程: Compile node module libraries for AWS Lambda

这也适用于这种情况下,当PhantomJS是另一个节点模块,例如依赖。 node-webshot,并且您对安装的内容影响较小。

+1

谢谢。比公认的答案更有帮助。 – geotheory