この記事について
こんにちは、suzu6です。
Python + AWS Lambdaを使ってサーバレスなウェブアプリケーション作る場合、マイクロフレームワークのFlask
の利用をおすすめします。
このブログサイトもAWS LambdaにFlaskを載せて製作しています。
この記事では、Flaskの使い方をご紹介します。
Flaskとは
マイクロWEBフレームワークと呼ばれており、コアな機能のシンプルなフレームワークであるため軽量です。小規模から中規模のWEBアプリの構築に向いています。URLのマッピングやJinja2
を使ったテンプレートエンジンなど必要なものは、十分揃っていると思います。
翻訳はこちら Flaskへ ようこそ
同じPythonで利用できるDjangoと比べられることが多く、こちらはフルスタックフレームワークであり多くの機能が備わっています。例えば、データの構造を抽象化した「モデル(Model)」の提供してDBのテーブルの操作・定義を簡単にしたり、管理画面を自動で作成してくれます。
FlaskはDBの管理や管理画面の作成は自分で実装する必要があります。その分自由度も高く、ブラックボックスも少ないです。そのため、WEBアプリケーションの入門としてFlaskを使い、開発効率を求めてDjangoに移るのも良いんじゃないでしょうか?
また、軽量さがサーバレスアーキテクチャと相性が良く、アプリのAPIをFlaskで作ると良い感じです。
FlaskでHello World
Flaskの簡潔さを示すため、Hello World
を返すWEBアプリのコードを載せます。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
とっても短いですね。
@app.route("/")
Flaskクラスのインスタンス(app)のrouteデコレータを使い、 / というURLに対しての処理を追加しています。
Flaskのインストールして実行します。hello.pyのファイルに上記のコードを書いておきます。
$ pip install Flask
$ FLASK_APP=hello.py flask run
* Serving Flask app "hello.py"
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
簡単に実行できました。
FLASK_APP=hello.py flask run
ではなく、短くpython hello.py
で実行したい場合はメイン関数にapp.run()
を書き足しておいてください。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
# 実行関数を追加
if __name__ == "__main__":
app.run()
$ python hello.py
AWS Lambdaで公開してみる
AWS lambdaでFlaskを実行してみましょう。
Zappaを使ってPythonのコードをAWS Lambdaにデプロイする
こちらでは、ZappaというPythonのWSGIアプリケーションをコマンドラインでデプロイできる便利なツールを利用して、AWS Lambdaに展開しています。長めの記事ですが利用方法を詳しく書いたので、良ければご参照下さい。
(仮想環境を作ってAWSの設定を行なった後)
$ pip install zappa
$ zappa init
$ zappa deploy
ざっくりとですが、以上のコマンドでAWS上で公開されます。
LambdaだとApache
やNginx
などのwebサーバを使わずに公開できてしまうところがポイントです。Lambda+Flaskの組み合わせにする以前は、Linuxも相まって設定がものすごく大変でした。その分をAWSのコンソール上で設定できるので、vimやコマンドが苦手な私には大変助かります。(AWSの設定を覚える大変さはありますが。。。)
また、Lambda特有のスケーラブルなところも活用できて、Flaskとの組み合わせは協力だと思います。
Flask サンプル集
Flaskを使ったサンプルを集めました。
こちらでは、Flask公式チュートリアルのFlaskrというブログアプリを作っています。
こちらでは、簡単な分析ツールを製作されています。データベースとの接続、pandasとmatplotlibを使った解析と結果の表示を行なっています。
まとめ
- マイクロWEBフレームワークのFlask
- とても簡潔な記述と自由度の高さが売り
- AWS Lambdaで動くのでサーバレスアーキテクチャとして活躍する
また、Flaskの詳しい使い方については記事にしてまとめたいと思います。 最後までご覧いただき、ありがとうございました。
サーバレスアーキテクチャを勉強される方は、こちらの本がおすすめです。
動画シェアサイトをAWS Lambda, S3を使って実際に構築する手順が載っています。 その中で、どのようにLambdaを構成したら良いか大変参考になりました。また、DynamoDBとAuth0も詳しく書かれています。