EC2上でFlaskを動かしてみる

2015.06.30

サーモン大好き横山です。 今回はPythonで動くMicro Web Frameworkとして動く Flask をEC2上で動かします。

準備

Amazon Linux AMI 2015.03t2.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/ にブラウザからアクセスする

スクリーンショット_2015-06-30_18_01_21

実行時のコンソールの出力

(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')

/にアクセスが来たら、//のページにリダイレクトしています。 numberrandint(0,len(fortune_strings)-1)でランダムに飛びます。 //のページではnumberの値によって、おみくじ結果を表示しています。

実行結果

hoge_001

まとめ

ちょっとしたWebアプリケーションを作るのに便利です。 テンプレートとかも使えますし、プラグインもたくさんあるので興味があれば是非調べてみてください。