Как вы запускаете RServe на AWS Lambda с NodeJS?
Хотя этот вопрос довольно открытый, я обычно стараюсь следить за этим прекрасным постом здесь: https://aws.amazon.com/blogs/compute/analyzing-genomics-data-at-scale-using-r-aws-lambda-and-amazon-api-gateway/ который описывает настройку R для работы с python. Я, с другой стороны, пытаюсь заставить R работать с NodeJ.
Я собрал свои зависимости, развернул их в Lambda и могу запускать простые сценарии Node. Однако у меня возникают трудности при подключении к RServe из Node с использованием пакета npm Rio ( https://www.npmjs.com/package/rio). RServe, как на моем локальном хосте, так и на Heroku, примет соединение по умолчанию 127.0.0.1 и порт 6331. С AWS Lambda не повезло.
'use strict';
var rio = require('rio');
var Promise = require('bluebird');
var exec = require('child_process').exec;
var whenReady = new Promise(function(resolve){
// require libraries and bootup RServe
exec('Rscript init.R', function(error, stdout, stderr) {
(function check() {
// Attempt to connect to RServe through Rio using my 'up' test function
rio.e({
entrypoint: 'up',
callback: function (err) {
console.log(err);
if (err) return setTimeout(check, 100);
// If no connection error, rserve is running
console.log("Rserve up");
resolve();
}
});
})();
});
});
exports.handler = function(event, context, callback) {
whenReady.then(function () {
// Call hello world
rio.e({
entrypoint: 'hello',
data: {name:'Will'},
callback: function(err, result){
console.log("Error", err);
callback(null, result);
}
});
});
};
Это заканчивается ошибкой в соединении
2017-03-01T22:58:33.210Z 96f69baf-fed2-11e6-9164-e91b9773d645 { [Ошибка: подключить ECONNREFUSED 127.0.0.1:6311] код: 'ECONNREFUSED',
errno: 'ECONNREFUSED', системный вызов: 'connect', адрес: '127.0.0.1',
порт: 6311 }
Любые идеи о том, как это исправить? Я надеюсь, что нам не нужно усложнять: https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/
Заранее спасибо!
** Обновить **
init.R делает следующее
// Require some libraries
...
require('jsonlite');
up <- function () {
toJSON(TRUE)
}
run.Rserve()
** Последнее обновление **
Отказался и пошел к примеру с питоном, который был опубликован в первой ссылке.
Будет