如何使用 NodeJS 在 AWS Lambda 上运行 PhantomJS
Posted
技术标签:
【中文标题】如何使用 NodeJS 在 AWS Lambda 上运行 PhantomJS【英文标题】:How do I run PhantomJS on AWS Lambda with NodeJS 【发布时间】:2016-04-11 06:02:56 【问题描述】:在互联网上其他任何地方都没有找到有效的答案后,我提交了这个自问自答教程
如何从AWS Lambda
上的NodeJS
脚本运行一个简单的PhantomJS
进程?我的代码在本地机器上运行良好,但尝试在 Lambda 上运行时遇到了不同的问题。
【问题讨论】:
【参考方案1】:编辑:这不再有效。 This is an apparent solution.
这是一个简单的PhantomJS
进程的完整代码示例,它以NodeJS
child_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);
);
幻影脚本.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 二进制文件,请访问 PhantomJS Bitbucket Page 并下载 phantomjs-1.9.8-linux-x86_64.tar.bz2
。
【讨论】:
很棒的答案@Tyler。 @Tyler 同样,我实现了我的代码。一切都很好,只是它显示我在完成之前退出了进程。我能知道是什么导致了这个问题吗?? 这不再起作用了。这是一个更新的答案:***.com/a/56843029/61624【参考方案2】:一个通用的解决方案是使用实际的 AWS Linux 机器来安装 npm 模块并将它们传输到您的 lambda 可执行文件。步骤如下:
-
启动一个 EC2 实例
ssh 进入 EC2
安装 Node + npm
安装所需的 npm 模块
拉上拉链
使用
scp
将它们提取到您的本地计算机
解压并复制到 lambda 函数的 npm_modules 文件夹中(不要在本地安装 npm!)
将您的代码上传到 Lambda
这是一个教程,其中包含指向更多资源的链接: Compile node module libraries for AWS Lambda
当 PhantomJS 是另一个节点模块的依赖项时,这也适用于这种情况,例如。 node-webshot 并且您对正在安装的内容的影响较小。
【讨论】:
谢谢。比公认的答案更有帮助。以上是关于如何使用 NodeJS 在 AWS Lambda 上运行 PhantomJS的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS Lambda (NodeJS) 创建 AWS AppSync
对于 AWS lambda 无服务器 nodejs 应用程序,您如何在开发环境中执行请求?