web-dev-qa-db-ja.com

AWS Elastic BeanstalkへのFlaskのデプロイは、スクリプトの実行とどのように異なりますか?

Flaskアプリケーションをec2インスタンスにデプロイする(つまり、任意のコンピューターでスクリプトを実行する)ことと、FlaskアプリケーションをAWSElastic経由でデプロイすること)の違いは何ですか? Beanstalk?Flask デプロイメントドキュメント は次のように述べています:

軽量で使いやすい一方で、Flaskの組み込みサーバーは拡張性が低く、デフォルトでは一度に1つのリクエストしか処理しないため、本番環境には適していません。本番環境でFlaskを適切に実行するために使用できるオプションのいくつかは、ここに記載されています。

彼らが推奨するデプロイオプションの1つは、AWS ElasticBeanstalkです。アマゾンの 説明 Flaskアプリのデプロイ方法)を読んだとき、しかし、彼らはFlaskに組み込まれているものとまったく同じサーバーアプリケーションを使用します。たとえば、シングルスレッドであるため、同時リクエストを処理できません。ElasticBeanstalkでは複数のコピーをデプロイできることを理解していますが、それでも使用しているようです。組み込みのFlaskサーバーアプリケーション。何が欠けていますか?

16
Michael

TL; DR完全に異なる-ElasticBeanstalkdoesは、Flask開発サーバーよりも優れた賢明なWSGIランナーを使用します!

Flaskアプリをデプロイする方法についてのAmazonの説明を読んだところ、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呼び出し可能を見つけます。

From Elastic BeanstalkのPythonプロジェクトの構成

デフォルトでは、ElasticBeanstalkはapplication.pyというファイルを探してアプリケーションを起動します。作成したPythonプロジェクトにこれが存在しない場合は、アプリケーションの環境を調整する必要があります。

チェックアウトすると aws:elasticbeanstalk:container:python名前空間のドキュメント WSGIアプリケーションを他の場所で探すように構成できることがわかります。

WSGIPath:WSGIアプリケーションを含むファイル。このファイルには、呼び出し可能な「アプリケーション」が必要です。デフォルト:application.py

14
Kristian Glass