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

Mic*_*ael 16 python deployment amazon-ec2 flask amazon-elastic-beanstalk

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

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

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

Kri*_*ass 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()
Run Code Online (Sandbox Code Playgroud)

您将无法在本地自行运行它,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