Flaskアプリケーションをec2インスタンスにデプロイする(つまり、任意のコンピューターでスクリプトを実行する)ことと、FlaskアプリケーションをAWSElastic経由でデプロイすること)の違いは何ですか? Beanstalk?Flask デプロイメントドキュメント は次のように述べています:
軽量で使いやすい一方で、Flaskの組み込みサーバーは拡張性が低く、デフォルトでは一度に1つのリクエストしか処理しないため、本番環境には適していません。本番環境でFlaskを適切に実行するために使用できるオプションのいくつかは、ここに記載されています。
彼らが推奨するデプロイオプションの1つは、AWS ElasticBeanstalkです。アマゾンの 説明 Flaskアプリのデプロイ方法)を読んだとき、しかし、彼らははFlaskに組み込まれているものとまったく同じサーバーアプリケーションを使用します。たとえば、シングルスレッドであるため、同時リクエストを処理できません。ElasticBeanstalkでは複数のコピーをデプロイできることを理解していますが、それでも使用しているようです。組み込みのFlaskサーバーアプリケーション。何が欠けていますか?
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