AWS Elastic Beanstalk -Flaskアプリをデプロイ-

AWS Elastic Beanstalk (EB)ではアプリケーションをデプロイすれば

Azure App ServiceのWeb Appと同じですね。

Azure Web App + Python

 

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.pyrequirements.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)に対してはしっかり料金が発生します。

つけっぱなしには気をつけましょう。

 

参考

コメントを残す