如何使用NodeJS在AWS Lambda上运行RServe?

时间:2017-03-01 23:19:11

标签: node.js aws-lambda rserve

虽然这个问题非常开放,但我一般都试图在这里发表这篇优秀文章:https://aws.amazon.com/blogs/compute/analyzing-genomics-data-at-scale-using-r-aws-lambda-and-amazon-api-gateway/,它描述了将R设置为与python一起运行。另一方面,我试图让R与NodeJs一起工作。

我打包了我的依赖项,部署到Lambda,并且可以运行简单的Node脚本。但是,我很难使用npm包Rio(https://www.npmjs.com/package/rio)从Node连接到RServe。我的localhost和Heroku上的RServe将接受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',
  错误:' 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()
&#13;
&#13;
&#13;

**最后更新**

放弃并转到第一个链接中发布的python示例。

威尔

0 个答案:

没有答案