EC2上でFlaskを動かしてみる
サーモン大好き横山です。 今回はPythonで動くMicro Web Frameworkとして動く Flask をEC2上で動かします。
準備
Amazon Linux AMI 2015.03のt2.microインスタンスを使用します。 yumのupdateといくつか追加でパッケージを入れ、virtualenv環境を構築します。
$ sudo yum -y update $ sudo yum groupinstall -y "Development tools"
$ mkdir /tmp/flask $ cd !:1 $ virtualenv -p /usr/lib/python27 venv $ . venv/bin/activate (venv)$
また、実行時にTCP5000番のポートを使用するので、セキュリティグループで5000番を許可しましょう。 (任意のポートに変える事が可能ですが、ここはデフォルトの設定で行きます)
Flaskのインストール
まず、pipのバージョンが古いと怒られるので、pip install -U pipをやります。 次に、pip install flaskでflaskをvirtaulenvで作った環境の中にインストールします。
(venv)$ pip install -U pip You are using pip version 6.0.8, however version 7.0.3 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-7.0.3-py2.py3-none-any.whl#md5=6950e1d775fea7ea50af690f72589dbd Downloading pip-7.0.3-py2.py3-none-any.whl (1.1MB) 100% |################################| 1.1MB 430kB/s Installing collected packages: pip Found existing installation: pip 6.0.8 Uninstalling pip-6.0.8: Successfully uninstalled pip-6.0.8 Successfully installed pip-7.0.3
(venv)$ pip install flask 100% |████████████████████████████████| 544kB 863kB/s Collecting Werkzeug>=0.7 (from flask) Downloading Werkzeug-0.10.4-py2.py3-none-any.whl (293kB) 100% |████████████████████████████████| 294kB 1.5MB/s Collecting Jinja2>=2.4 (from flask) Downloading Jinja2-2.7.3.tar.gz (378kB) 100% |████████████████████████████████| 380kB 1.5MB/s Collecting itsdangerous>=0.21 (from flask) Downloading itsdangerous-0.24.tar.gz (46kB) 100% |████████████████████████████████| 49kB 7.4MB/s Collecting markupsafe (from Jinja2>=2.4->flask) Downloading MarkupSafe-0.23.tar.gz Installing collected packages: Werkzeug, markupsafe, Jinja2, itsdangerous, flask Running setup.py install for markupsafe Running setup.py install for Jinja2 Running setup.py install for itsdangerous Running setup.py install for flask Successfully installed Jinja2-2.7.3 Werkzeug-0.10.4 flask-0.10.1 itsdangerous-0.24 markupsafe-0.23
Flaskを実行する
Flask公式のページを参考にソースコードを書きます。
#!/usr/bin/env python # -*- encoding: utf-8 -*- from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello World!' if __name__ == '__main__': app.run(host='0.0.0.0')
app.run(host='0.0.0.0')でhostを追加しているのは、EC2の外からアクセス出来るようにしています。
ブラウザからアクセス
- http://[EIP]:5000/ にブラウザからアクセスする
実行時のコンソールの出力
(venv)$ python app.py * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) xxx.xxx.xxx.xxx - - [30/Jun/2015 09:01:13] "GET / HTTP/1.1" 200 -
おみくじを作ってみる
簡単にWebページ表示までいったので、おみくじを作ってみようと思います。 ソースコードは以下のとおりです。
#!/usr/bin/env python # -*- encoding: utf-8 -*- from flask import Flask, redirect, url_for from random import randint app = Flask(__name__) fortune_strings = [u'大吉', u'中吉', u'小吉', u'吉', u'半吉', u'末吉', u'末小吉', u'凶', u'小凶', u'半凶', u'末凶', u'大凶'] @app.route('/') def paper_fortune(): return redirect(url_for('fortune_result', number=randint(0,len(fortune_strings)-1))) @app.route('//') def fortune_result(number): if not 0 <= number < len(fortune_strings): number = -1 html = u' <h1>{0}</h1> '.format(fortune_strings[number]) html += u'<a href="{0}">引き直す</a>'.format(url_for('paper_fortune')) return html if __name__ == '__main__': app.run(host='0.0.0.0')
/にアクセスが来たら、/<int:number>/のページにリダイレクトしています。 numberはrandint(0,len(fortune_strings)-1)でランダムに飛びます。 /<int:number>/のページではnumberの値によって、おみくじ結果を表示しています。
実行結果
まとめ
ちょっとしたWebアプリケーションを作るのに便利です。 テンプレートとかも使えますし、プラグインもたくさんあるので興味があれば是非調べてみてください。