使用多个端口在单个EC2实例上托管多个Plumber API?

时间:2018-03-16 18:39:04

标签: r amazon-ec2 plumber

遵循R的非常好的Plumber文档,以及从this helpful link获得帮助,我能够使用Plumber库在EC2实例上设置单个R API,并带有几个端点。

我在EC2实例的端口8000上有这个API,并确认,如果我检查我的EC2实例中的进程,我可以在端口8000上看到我的R API:

[ec2-user@ip-123-45-67-890 ~]$ lsof -i tcp:8000
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
R       16784 ec2-user   11u  IPv4 152626      0t0  TCP *:irdmi (LISTEN)

我想在同一个EC2服务器上启动第二个API,我的问题是,我可以使用EC2服务器上的其他端口来提供API吗?例如,在我的新文件的R文件中," plumbs" API,我只需将端口更改为8001:

# clear workspace and load library
rm(list = ls())
library(plumber)

# serve API
r <- plumb("NBA_API.R")
r$run(host="0.0.0.0", port=8001)

此外,对于EC2实例,更改安全组以便可以访问端口8001。

这样做(使用不同的端口)没关系,还是我要通过尝试在不同的端口上托管多个API来搞乱EC2实例?在搞乱我现有的API之前,我想知道这一点。

提前感谢您对此的任何帮助!

编辑 - 同样,如果可以使用端口8001,这意味着我几乎可以使用任何端口来提供其他API(8002,8003,8004等)。有没有我不应该使用的端口?

1 个答案:

答案 0 :(得分:2)

那应该不是问题。您可以在任意端口上托管任意数量的这些内容。您只需要确保安全组允许流量通过您的计算机,如果适用,计算机的本地防火墙也允许流量。

请注意,在服务器上本地运行R并不是最佳选择。如果R进程崩溃(例如由于代码中的错误可能会在不太可能的情况下被绊倒),它将不会自动重启。同样,如果服务器需要重新启动,则需要在适当的端口上手动启动相应的进程以使事情再次运行。

您可以查看https://www.rplumber.io/docs/hosting.html中提到的一些托管选项,了解如何以更“生产”的方式托管管道工。我没有在文档中专门讨论EC2,但其中一些模式(包括PM2)在EC2机器上应该可以正常工作。