schedule2018-07-08

Python + Flask入門とサーバレスアーキテクチャ

この記事について

こんにちは、suzu6です。

Python + AWS Lambdaを使ってサーバレスなウェブアプリケーション作る場合、マイクロフレームワークのFlask の利用をおすすめします。

このブログサイトもAWS LambdaにFlaskを載せて製作しています。

この記事では、Flaskの使い方をご紹介します。

Flaskとは

マイクロWEBフレームワークと呼ばれており、コアな機能のシンプルなフレームワークであるため軽量です。小規模から中規模のWEBアプリの構築に向いています。URLのマッピングやJinja2を使ったテンプレートエンジンなど必要なものは、十分揃っていると思います。

Flask 公式

翻訳はこちら 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)

hello_world

簡単に実行できました。

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だとApacheNginxなどの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も詳しく書かれています。