如何远程访问在AWS EC2上运行的Python Flask应用程序?

Vis*_*rez 0 python amazon-ec2 amazon-web-services flask

我有一个 Flask 应用程序,已将其克隆到我的 aws ec2 实例上。我只能使用虚拟环境运行它(我通过运行以下命令激活它):

$ python3 -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
$ pip install flask==1.1.1
Run Code Online (Sandbox Code Playgroud)

下面是我的应用程序:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run() 
Run Code Online (Sandbox Code Playgroud)

执行时运行得很好env FLASK_APP=app.py flask run。问题是,我想使用我的 aws ec2 的公共 IP 或主机名远程访问公开的路由。每当我尝试访问它时,我都会收到一个 tiemout 错误。我认为这是因为我在虚拟环境中运行烧瓶应用程序,但我不确定。我找不到任何关于如何揭露这一点的好的教程。我这里哪里出错了?

v25*_*v25 5

快速且安全的解决方案:

当您运行开发服务器时,它并不用于生产。我想说从您自己的计算机连接到此应用程序的最佳方法是使用 ssh 隧道:

ssh -L 5000:localhost:5000 ec2_addr
Run Code Online (Sandbox Code Playgroud)

然后,您可以将 Web 浏览器指向http://localhost:5000/客户端计算机,该计算机将通过隧道连接到 EC2 实例上的端口 5000。这是连接到远程 Linux 机器上的 Flask(或任何)服务器的快速方法。当您停止该 ssh 会话时,隧道将被破坏。

较长的方法:

我想使用我的 aws ec2 的公共 IP 或主机名远程访问公开的路由。

超时并不是因为它在虚拟环境中运行:您可能会发现这是因为您需要通过 EC2 控制台将安全组分配给您的实例。这些允许您打开公共 IP 上的某些端口。

请参阅我写的有关EC2 安全组的其他答案。

不过要小心。您不应该以这种方式公开开发服务器。Digital Ocean 中有很多类似的教程,其中介绍了如何gunicorn使用SSLnginx证书部署 Flask 应用程序Let's Encrypt。您应该发现自己的安全组公开了端口 80 和 443,对端口 80 的请求被httpsnginx 配置重定向到 URL。

如果这听起来很麻烦/您没有 Linux 技能/您不想学习 Linux 技能,那么这些是人们选择 AWS Elastic Beanstalk 等托管服务的常见原因,您可以在其中部署 Flask 应用程序(官方指南),无需担心服务器配置。Heroku 是另一个提供此类功能的(非 AWS)服务。

这实际上取决于您需要/希望获得什么。注意安全!