如何在AWS Elastic Beanstalk上部署Flask与运行脚本不同?

问题描述 投票:16回答:2

在ec2实例上部署Flask应用程序(换句话说,在任何计算机上运行脚本)和通过AWS Elastic Beanstalk部署Flask应用程序有什么区别? Flask 部署文档说:

虽然重量轻且易于使用,但Flask的内置服务器不适合生产,因为它不能很好地扩展,默认情况下一次只能提供一个请求。 此处记录了可用于在生产中正确运行Flask的一些选项。

他们推荐的部署选项之一是AWS Elastic Beanstalk。 然而,当我阅读亚马逊关于如何部署Flask应用程序的解释时,似乎他们正在使用与Flask内置的完全相同的服务器应用程序,例如,它是单线程的,因此无法处理同时发出的请求。 据我所知,Elastic Beanstalk允许您部署多个副本,但它似乎仍然使用内置的Flask服务器应用程序。 我错过了什么?

python amazon-ec2 deployment flask elastic-beanstalk
2个回答
14
投票

TL; DR完全不同 - Elastic Beanstalk 确实使用了比Flask开发服务器更好的WSGI运行器!

然而,当我阅读亚马逊关于如何部署Flask应用程序的解释时,他们似乎正在使用与Flask内置的完全相同的服务器应用程序

几乎,但不完全。

您可以通过自行删除run-with-built-in-server部分来确认不是这种情况 - 即示例中的以下内容:

if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    application.debug = True
    application.run()

你将无法使用python application.py在本地运行它,但它仍然可以在EB上运行!

EB Python平台使用自己的WSGI服务器(带有mod_wsgi的Apache,我看过的最后一个)和一些假设/配置来查找你的WSGI可调用:

为Elastic Beanstalk配置Python项目

默认情况下,Elastic Beanstalk会查找名为application.py的文件来启动您的应用程序。 如果在您创建的Python项目中不存在这种情况,则需要对应用程序的环境进行一些调整。

如果你查看了aws:elasticbeanstalk:container:python命名空间的文档,你会看到你可以配置它来寻找你的WSGI应用程序的其他地方:

WSGIPath :包含WSGI应用程序的文件。 此文件必须具有“应用程序”可调用。 默认值: application.py


-3
投票

弹性计算资源(AWS和其他)通常允许动态负载平衡,并在需要时启动更多计算资源。

如果部署在单个ec2实例上,并且此实例达到容量,则用户将遇到性能不佳的情况。 如果弹性部署,则会动态添加新资源,以确保顺畅的性能。

© www.soinside.com 2019 - 2024. All rights reserved.