普通のシステムエンジニアの備忘録

きみひで と言います。個人勉強で触れた技術など備忘禄と時々日常を綴ります。

【超簡単】FlaskアプリをElastic beanstalkにデプロイ

さっぱりピーマンな自分が備忘のために、

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 のソース

from flask import Flask

# ==================================================
# ==================================================
application = Flask(__name__)

# ==================================================
# ルーティング
# ==================================================
@application.route('/')
def hello_world():
    return '<h1>ハローワールド</h1>'

if __name__ == "__main__":
    application.debug = True
    application.run()

ハローワールドと表示させるだけのシンプルソースです。

 

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の管理画面で見ても、デプロイされていること確認できます。