从NodeJS调用AWS Lambda上的R脚本

时间:2017-10-31 16:15:31

标签: r node.js amazon-web-services lambda rserve

由于几个小时的无用搜索,我发布了这个问题。 我想它与这个重复: How do you run RServe on AWS Lambda with NodeJS? 但由于该问题的作者似乎没有成功完成他/她的目标,我将再试一次。

我目前拥有的内容:

NodeJS服务器,它通过Rserve调用R脚本,并通过node-rio传递数据进行评估。

负责的功能如下:

const R = (arg1, arg2) => {
        return new Promise((resolve, reject)=>{
          const args = {
            arg1, arg2
          };
          //send data to Rserve to evaluate
          rio.$e({
            filename: path.resolve('./r-scripts/street.R'),
            entrypoint: 'run',
            data: args,
          })
            .then((data)=>{
              resolve(JSON.parse(data));
            })
            .catch((err)=>{
              reject(`err: ${err}`);
            });
        });
    };

这很好用。我将数据发送到我的R实例并将结果返回到我的服务器。

我最终想要实现的目标:

每个请求似乎都会产生自己的R工作空间,这会产生相当大的内存开销。因此,使用这种方法提供甚至数百个并发请求是不可能的,因为我的AWS EC2很快耗尽了内存。 因此,我正在寻找一种方法将所有内存密集型部件部署到AWS Lambda,从而摆脱内存开销。

我想,我的具体问题是,是否有办法将R和Rserve与NodeJS lambda函数一起打包。或者,如果有办法让我确信这种方法不能使用lambda,我应该尝试寻找替代方案。

注意:我不能使用R以外的任何东西,因为这些是外部R脚本,我必须从我的服务器调用。

提前致谢!

0 个答案:

没有答案