How is Deploying Flask on AWS Elastic Beanstalk different from running script?

倖福魔咒の 提交于 2019-12-04 00:36:45

TL;DR Completely different - Elastic Beanstalk does use a sensible WSGI runner that's better than the Flask dev server!

When I read through Amazon's explanation of how to deploy a Flask app, however, it seems like they are using the exact same server application as comes built-in to Flask

Almost, but not quite.

You can confirm that this isn't the case by removing the run-with-built-in-server section yourself - i.e. the following from the example:

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()

You'll stop being able to run it yourself locally with python application.py but it'll still happily run on EB!

The EB Python platform uses its own WSGI server (Apache with mod_wsgi, last I looked) and some assumptions / config to find your WSGI callable:

From Configuring a Python project for Elastic Beanstalk:

By default, Elastic Beanstalk looks for a file called application.py to start your application. If this doesn't exist in the Python project that you've created, some adjustment of your application's environment is necessary.

If you check out the docs for the aws:elasticbeanstalk:container:python namespace you'll see you can configure it to look elsewhere for your WSGI application:

WSGIPath: The file that contains the WSGI application. This file must have an "application" callable. Default: application.py

Elastic compute resources (AWS and others) generally allow for dynamic load balancing, and start more compute resources as they are needed.

If you deploy on a single ec2 instance, and this instance reaches capacity, your users will experience poor performance. If you deploy elastically, new resources are dynamically added as to ensure smooth performance.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!