http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
に沿って作業していきます
###前提条件
【AWS】ebでPython環境構築してみた 開発環境編は少なくとも出来る環境にある
要は以下4つが使えればOK
- Python 2.7
- pip
- virtualenv
- awsebcli
###仮想環境を設定する
手元のクライアントで作業します(私はMac)
VIRTUAL_ENV_NAME='eb-test-Flask'
VIRTUAL_ENV_NAME='eb-test-Flask'
cd ~
virtualenv ${VIRTUAL_ENV_NAME}
New python executable in /Users/****/eb-test-Flask/bin/python
Installing setuptools, pip, wheel...done.
###仮想環境の実行
source ~/${VIRTUAL_ENV_NAME}/bin/activate
コマンドプロンプトの先頭に()で環境名がついていればOK
(eb-test-Flask)
###Flaskの導入
pip install flask==0.10.1
pip freeze
Flask==0.10.1
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
Werkzeug==0.11.9
上記結果が出力されれば成功です
###Flask アプリケーションを作成する
次に、Elastic Beanstalk を使用してデプロイするアプリケーションを作成します。ここでは、"Hello World" という RESTful ウェブサービスを作成します。
確認
コマンドプロンプトの先頭に()で環境名がついていること。
この手順だと(eb-test-Flask)
###プロジェクト用ディレクトリの作成
pwd
/Users/****/eb-test-Flask
PJ_DIR_NAME='eb-flask'
mkdir ${PJ_DIR_NAME}
ls | grep ${PJ_DIR_NAME}
eb-flask
cd ${PJ_DIR_NAME}
pwd
/Users/****/eb-test-Flask/eb-flask
サンプルアプリケーションを作成します
コードはドキュメントから抜粋してそのまま使用
from flask import Flask
# print a nice greeting.
def say_hello(username = "World"):
return '<p>Hello %s!</p>\n' % username
# some bits of text for the page.
header_text = '''
<html>\n<head> <title>EB Flask Test</title> </head>\n<body>'''
instructions = '''
<p><em>Hint</em>: This is a RESTful web service! Append a username
to the URL (for example: <code>/Thelonious</code>) to say hello to
someone specific.</p>\n'''
home_link = '<p><a href="/">Back</a></p>\n'
footer_text = '</body>\n</html>'
# EB looks for an 'application' callable by default.
application = Flask(__name__)
# add a rule for the index page.
application.add_url_rule('/', 'index', (lambda: header_text +
say_hello() + instructions + footer_text))
# add a rule when the page is accessed with a name appended to the site
# URL.
application.add_url_rule('/<username>', 'hello', (lambda username:
header_text + say_hello(username) + home_link + footer_text))
# run the app.
if __name__ == "__main__":
# Setting debug to True enables debug output. This line should be
# removed before deploying a production app.
application.debug = True
application.run()
###application.pyの実行
仮想環境下で作業ディレクトリにいる事を確認して下さい。
(ここまでの処理から他のことをしていなければ大丈夫です)
pwd
/Users/****/eb-test-Flask/eb-flask
python application.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 344-661-719
ブラウザーを起動して
http://127.0.0.1:5000/ へアクセスします。
curl http://127.0.0.1:5000/
<html>
<head> <title>EB Flask Test</title> </head>
<body><p>Hello World!</p>
<p><em>Hint</em>: This is a RESTful web service! Append a username
to the URL (for example: <code>/Thelonious</code>) to say hello to
someone specific.</p>
</body>
確認できたら止めて大丈夫です
Control + C
###eb用にFlaskアプリケーションを設定する
アプリケーションが手元の環境で実行できたのでebに実装します
注意
引き続き仮想環境下での作業になります
cd ~/${VIRTUAL_ENV_NAME}/${PJ_DIR_NAME}
pwd
/Users/****/eb-test-Flask/eb-flask
pip freeze > requirements.txt
cat requirements.txt
Flask==0.10.1
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
Werkzeug==0.11.9
Elastic Beanstalk は requirements.txt を使用して、アプリケーションを実行する EC2 インスタンスにどのパッケージをインストールするかを判断します。
だからこの作業が必要。そしてファイル名も requirements.txt じゃないといけない。
###仮想環境の終了
deactivate
プロンプト先頭の()がなくなれば大丈夫です
###ディレクトリ構成確認
tree ~/${VIRTUAL_ENV_NAME}/${PJ_DIR_NAME}
/Users/****/eb-test-Flask/eb-flask/
├── application.py
└── requirements.txt
###つづき