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

Python 在AWS Elastic Beanstalk上部署Flask与运行脚本有何不同?,python,amazon-ec2,deployment,flask,amazon-elastic-beanstalk,Python,Amazon Ec2,Deployment,Flask,Amazon Elastic Beanstalk,在ec2实例上部署Flask应用程序(换句话说,在任何计算机上运行脚本)和通过AWS Elastic Beanstalk部署Flask应用程序之间有什么区别?烧瓶上写着: 虽然重量轻且易于使用,但Flask的内置服务器并非如此 适用于生产,因为它不能很好地扩展,默认情况下可以提供服务 一次只有一个请求。一些可供选择的选项适用于 此处记录了生产中的运行烧瓶 他们推荐的部署选项之一是AWS Elastic Beanstalk。然而,当我阅读亚马逊关于如何部署Flask应用程序的文章时,他们似乎使用的

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

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

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

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


如果您部署在单个ec2实例上,并且该实例达到了容量,那么您的用户将体验到较差的性能。如果弹性部署,则会动态添加新资源,以确保性能平稳。

TL;DR完全不同-Elastic Beanstalk确实使用了比Flask dev服务器更好的明智的WSGI运行程序

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

差不多,但不完全一样

您可以通过自己删除“使用内置服务器运行”部分来确认情况并非如此-例如,示例中的以下内容:

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服务器(Apache with mod_WSGI,我最后一次查看)和一些假设/配置来发现您的WSGI是可调用的:

发件人:

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

如果您签出,您将看到您可以将其配置为在其他地方查找WSGI应用程序:

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


所有这些都是有道理的。然而,这似乎仍然建议您应该将Flask封装在Flask部署页面上建议的一个服务器应用程序中,以便Elastic Beanstalk部署的每个实例都更高效。我的问题是,Amazon不是在告诉你去做Flask告诉你不要做的事情吗?一旦我启动了它,我看到接口面板说它有一个线程WSGI,尽管我不知道它在哪里说它使用哪一个。您是否有任何文档可以指向“带有mod_wsgi的Apache,我最后一次查看”?“带有wsgi的Apache代理服务器”。但我现在无法启动一个实例来实际插入它以检查mod_wsgi!