遵循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等)。有没有我不应该使用的端口?答案 0 :(得分:2)
那应该不是问题。您可以在任意端口上托管任意数量的这些内容。您只需要确保安全组允许流量通过您的计算机,如果适用,计算机的本地防火墙也允许流量。
请注意,在服务器上本地运行R并不是最佳选择。如果R进程崩溃(例如由于代码中的错误可能会在不太可能的情况下被绊倒),它将不会自动重启。同样,如果服务器需要重新启动,则需要在适当的端口上手动启动相应的进程以使事情再次运行。
您可以查看https://www.rplumber.io/docs/hosting.html中提到的一些托管选项,了解如何以更“生产”的方式托管管道工。我没有在文档中专门讨论EC2,但其中一些模式(包括PM2)在EC2机器上应该可以正常工作。