AWS Elastic Beanstalk -Flaskアプリをデプロイ-
AWS Elastic Beanstalk (EB)ではアプリケーションをデプロイすれば
Azure App ServiceのWeb Appと同じですね。
目次
Elastic Beanstalk cliのインストール
公式に沿ってやっていきます。
brew install aws-elasticbeanstalk
仮想環境の構築
virtualenvで環境を構築します。
これまでpyenvしか使ってきてなかったのでvirtualenvをインストールします。
pip install virtualenv
仮想環境を作成。ホーム下に作ってます。
pyenvを使用しているとカレントディレクトリに設定されているPythonバージョンが使用されます。
二重構造でややこしい。
virtualenv ~/YOUR_DIRECTORY
ちょっと待って完了したらアクチベートします。
source ~/YOUR_DIRECTORY/bin/activate
すると、プロンプトの頭に(YOUR_DIRECTORY)
とついて有効下されたことがわかります。
例えばこの状態でpip freeze
と打ってみれば何もモジュールがインストールされていないことがわかります。
Flaskアプリケーションの作成
では次にEBにデプロイされるアプリケーションを作成します。
適当にディレクトリを作成し、git init
でgit管理します。
注意するのは、Flaskアプリケーションはapplication.pyというファイル名にしましょう。
EB側のWSGIがapplication.pyという名前のファイルを見るように設定されているからです。
application.pyの記述は公式サイトや以下のサイトを参考にしてください。
まずはローカルで確認しましょう。
python application.py
http://localhost:5000 にアクセスして想定通りFlaskアプリが動いていることを確認します。
もしpipでライブラリをインストールしていたらrequirements.txt
に出力しましょう。
EB側でこのファイルを見て依存関係を解決します。
pip freeze > requirements.txt
application.py
とrequirements.txt
があれば最低限のアプリをデプロイすることができます。
EBにデプロイする
まずEB CLIリポジトリを初期化します。
デフォルト以外のものを使う場合はprofileオプションに~/.aws/credentials
で設定しているプロファイルを指定します。
eb init --profile YOUR_PROFILE_NAME
すると、リージョンの選択を問われます。
こんな感じで選択式形式でPythonのバージョンやキーペアの選択をしていきます。
完了したらEBにデプロイします。
環境名は重複が許されません。他のアプリケーションでもです。
またアンダーバーも許可されないので気をつけましょう。
eb create YOUR_ENV_NAME
数分かかるのでしばらく待機。
開いて確認してみましょう。
eb open
ローカルと同じFlaskアプリケーションが確認できればOKです。
以後、アプリケーションを更新したら都度デプロイしましょう。
eb deploy
EBを停止する場合は、
eb terminate YOUR_ENV_NAME
で停止できます。
その他のeb cliのコマンドに関しては以下の公式ページを確認してください。
ERROR: Your WSGIPath refers to a file that does not exist.
eb create
で上記のエラーが出た場合は、ファイル名がapplication.py
になっていることを確認しましょう。
ERROR: InvalidParameterValueError – Environment xxx already exists.
すでにその環境名が使われていることを示します。
コードの変更を反映する場合はeb deploy
を使います。
もしくはeb terminate YOUR_ENV_NAME
で環境を終了してから改めてeb create YOUR_ENV_NAME
しましょう。
料金
EBはAWSがインフラなどを勝手にマネージしてくれるEC2インスタンスのようなものです(多分)。
EBの利用にあたって追加料金は発生しませんが、これに伴って使用されるAWSリソース(EC2やS3)に対してはしっかり料金が発生します。
つけっぱなしには気をつけましょう。