首页 文章

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

提问于
浏览
16

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

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

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

2 回答

  • -3

    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可调用:

    来自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

  • 14

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

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

相关问题