インターネット上の他の場所で有効な答えが見つからなかった後、私はこの質問と回答-自分のチュートリアルを提出しています
AWS Lambda
のPhantomJS
スクリプトから単純なNodeJS
プロセスを実行するにはどうすればよいですか?私のコードはローカルマシンで正常に動作しますが、Lambdaで実行しようとするとさまざまな問題が発生します。
編集:これはもう機能しません。 これは明らかな解決策です 。
以下は、PhantomJS
child_process
として起動される単純なNodeJS
プロセスの完全なコードサンプルです。 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();
AmazonのLinuxマシンで動作するPhantomJSバイナリを取得するには、 PhantomJS Bitbucket Page にアクセスしてphantomjs-1.9.8-linux-x86_64.tar.bz2
をダウンロードします。
一般的なソリューションは、実際のAWS Linuxマシンを使用してnpmモジュールをインストールし、それらをラムダ実行可能ファイルに転送することです。手順は次のとおりです。
scp
を使用してローカルマシンにフェッチします以下に、その他のリソースへのリンクを含むチュートリアルを示します。 AWS Lambdaのノードモジュールライブラリのコンパイル
これは、PhantomJSが別のノードモジュールの依存関係である場合にも機能します。 node-webshotを使用すると、インストールされるものに対する影響が少なくなります。