さっぱりピーマンな自分が備忘のために、
Flaskで作ったアプリをAWSのElastic beanstalkにデプロイする手順をまとめます。
参考にさせていただいたサイト
Elastic Beanstalk への Flask アプリケーションのデプロイ - AWS Elastic Beanstalk
微妙にバージョンや環境が異なりハマったので、私なりにリライトしてみます。
【実行環境】
OS:windows11
【初期設定】
最初にEB CLIというのを使います。
以下のサイトが参考になると思います。ググると色々でてきますので適時お願いします。
ebコマンド(awsebcli)のインストール #AWS - Qiita
【Flask で Python 仮想環境を設定する】
コマンドプロンプトでebっていれると別ウィンドウが上がってくる
こんな感じでコマンドプロンプトがもう一つ上がってくる。こちらをメインに作業する
プロジェクトディレクトリを作成&移動
■コマンド
mkdir eb-flask
cd eb-flask
実行結果
virt という名前の仮想環境を作成してアクティブ化
■コマンド
virtualenv virt
.\virt\Scripts\activate
★参考サイトだとactivateの部分がsourse~~ってなってますが、Windowsの場合だとコマンドが違うので注意です。
実行結果
コマンドプロンプトの先頭に (virt) と表示され、仮想環境を使用していることが示されます。このチュートリアルの残りの部分では、仮想環境を使用します。
pip install で Flask をインストール
■コマンド
pip install flask==2.3.3
★参考サイトでは、バージョンが2.0.3になっているが、この後でてくるWerkzeugとバージョンが合わないので、上位バージョンを選ぶこと
そのあたりが書いてある参考サイト
Flaskでurl_quoteが見つからなくなった問題 #Python - Qiita
実行結果
pip freeze で、インストールされているライブラリを表示
■コマンド
pip freese
実行結果
このコマンドは、仮想環境にインストールされるすべてのパッケージを一覧します。仮想環境にいるため、EB CLI などのグローバルにインストールされたパッケージは表示されません。
pip freeze からの出力を、requirements.txt という名前のファイルに保存
■コマンド
pip freeze > requirements.txt
実行結果
このファイルは、デプロイ中にライブラリをインストールするよう Elastic Beanstalk に指示します。
【Flask アプリケーションを作成する】
次に、Elastic Beanstalk を使用してデプロイするアプリケーションを作成します。ここでは、"Hello World" という RESTful ウェブサービスを作成します。 このディレクトリに、application.py という名前と以下の内容で新しいテキスト・ファイルを作成します
★ファイル名は「application.py」にすること。それ以外の名前にすると上手くいかない。 Elastic beanstalkの構成設定でこの名前で固定になっているようす。
詳細は、こちらのサイトにあります。
Elastic BeanstalkでPython3.6/Flask1.0アプリを動かす | DevelopersIO
application.py のソース
ハローワールドと表示させるだけのシンプルソースです。
Python を使用して application.py を実行
■コマンド
python application.py
実行結果
ブラウザで以下のULR叩いてハローワールドと表示されればOKです。
http://127.0.0.1:5000/
終わるときは、コマンドプロンプトを選択してCtrl+C を押すと、ウェブ・サーバーを停止して仮想環境に戻ることができます。
【EB CLI でサイトをデプロイ】
ここまでで、Elastic Beanstalk でアプリケーションをデプロイするために必要な条件をすべて追加しました。プロジェクトディレクトリは次のようになります。
ただし、virt フォルダは、Elastic Beanstalk でアプリケーションを実行するために必要ありません。デプロイすると、Elastic Beanstalk によりサーバーインスタンスに新しい仮想環境が作成され、requirements.txt にリストされているライブラリがインストールされます。デプロイ中にアップロードする出典バンドルのサイズを最小化するには、virt フォルダを離れるように EB CLI に指示する .ebignore ファイルを追加します。
↑このファイルを作る。
環境を作成し、Flask アプリケーションをデプロイ
eb init コマンドで EB CLI リポジトリを初期化します
■コマンド
eb init
実行すると別のウィンドウが立ち上がってきます。
regionなど設定を聞いてくるので回答していきます。
・region
9) ap-northeast-1 : Asia Pacific (Tokyo)
今回はTokyoにしておきます。どこでもいいです。
・アプリケーション名
→デフォルト: eb-flask にします。
・Pythonですか?
→Yesですね
・プラットフォームは?
1:1) Python 3.11 running on 64bit Amazon Linux 2023
書いてなかったですが、Python3.11を使っているので1を選択
・SSH設定しますか?
→Yes
・キーペア選んで
新しいのつくってみます。4
・キータイプの名前は?
デフォルトにしておきます。
・パスフレーズは?
空っぽでもよさそうなので、何も入れずにEnter。
ここまでで、一通り終わりです。
あと少しです。
環境を作成し、eb create を使用してそこにアプリケーションをデプロイ
■コマンド
eb create flask-env
実行結果(途中・・・5分くらいかかります)
デプロイが終わりましたので結果の確認です。
■コマンド
eb open
ブラウザが立ち上がり、サイトが見えればOKです。
お疲れさまでした。
【再デプロイ】
デプロイやり直す手順も書いておきます。
ソースの修正
今回はapplication.pyの一部を変更
再デプロイ
■コマンド
eb deploy
実行結果
再びeb openコマンドでサイトを開くと、変更が適用されていることがわかります。
AWSの管理画面で見ても、デプロイされていること確認できます。