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

时间:2017-03-06 21:39:21

标签: python amazon-ec2 deployment flask elastic-beanstalk

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

  

虽然轻巧且易于使用,但Flask的内置服务器却没有   适合生产,因为它不能很好地扩展,并且默认服务   一次只能有一个请求。一些可用的选项正确   这里记录了生产中运行Flask的情况。

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

2 个答案:

答案 0 :(得分:14)

TL; DR完全不同 - Elastic Beanstalk 使用比Flask开发服务器更好的合理WSGI跑者!

  

当我阅读亚马逊关于如何部署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服务器(带有mod_wsgi的Apache,我看过的最后)和一些假设/配置来查找你的WSGI可调用:

来自Configuring a Python project for Elastic Beanstalk

  

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

如果您查看the docs for the aws:elasticbeanstalk:container:python namespace,您会看到您可以将其配置为在其他地方寻找您的WSGI应用程序:

  

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

答案 1 :(得分:-3)

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

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