我如何使用nodejs在AWS Lambda上运行Phantomjs[英] How do I run PhantomJS on AWS Lambda with NodeJS

问题描述

未在互联网上的其他任何地方找到工作答案后,我正在提交此询问和答案 - 我自己的教程

如何在AWS Lambda上从NodeJS脚本运行一个简单的PhantomJS进程?我的代码在我的本地机器上工作正常,但我遇到了尝试在lambda上运行它的不同问题.

推荐答案

编辑:这不再有效. 这是一个明显的解决方案


这是一个简单PhantomJS过程的完整代码样本,它被推出为NodeJS child_process. 它也可以在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();

为了获得与亚马逊的Linux机器的幻影二进制文件,转到 phantomjs bitbucket页面并下载phantomjs-1.9.8-linux-x86_64.tar.bz2.

其他推荐答案

通用解决方案是使用实际的AWS Linux机器安装NPM模块并将其传输到Lambda可执行文件.以下是步骤:

  1. 旋转EC2实例
  2. ssh进入EC2
  3. 安装节点+ npm
  4. 安装所需的NPM模块
  5. 拉链它们
  6. 将它们与您的本地机器一起使用scp
  7. 解压缩并复制到Lambda函数的NPM_Modules文件夹(不要本地安装!)
  8. 将代码上传到lambda

以下是一个与更多资源的链接的教程: Aws lambda

这也在这种情况下工作,当Phantomjs是另一节点模块的依赖性时,例如. Node-Webshot,您对正在安装的内容的影响较少.

本文地址:https://www.itbaoku.cn/post/1739863.html