【AWS】ebでPython環境構築してみた Flaskアプリケーションデプロイ準備編 【Elastic Beanstalk】

http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
に沿って作業していきます


###前提条件
[【AWS】ebでPython環境構築してみた　開発環境編](http://qiita.com/Yuki_BB3/items/c8b74d2f788a2f29eea8)は少なくとも出来る環境にある

要は以下4つが使えればOK

* Python 2.7
* pip
* virtualenv
* awsebcli

###仮想環境を設定する
手元のクライアントで作業します（私はMac）

```bash:変数
VIRTUAL_ENV_NAME='eb-test-Flask'
```

```bash:コマンド
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
```

```bash:変数
PJ_DIR_NAME='eb-flask'
```

```bash:コマンド
mkdir ${PJ_DIR_NAME}
```

```bash:確認
ls | grep ${PJ_DIR_NAME}
```

```:結果
eb-flask
```

```bash:コマンド
cd ${PJ_DIR_NAME}
```

```:確認
pwd
```

```:結果
/Users/****/eb-test-Flask/eb-flask
```

サンプルアプリケーションを作成します
コードはドキュメントから抜粋してそのまま使用

```py:application.py
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:結果
    <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に実装します

__注意__
引き続き仮想環境下での作業になります

```bash:コマンド
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
```

プロンプト先頭の（）がなくなれば大丈夫です

###ディレクトリ構成確認

```bash:確認
tree ~/${VIRTUAL_ENV_NAME}/${PJ_DIR_NAME}
```

```bash:結果
/Users/****/eb-test-Flask/eb-flask/
├── application.py
└── requirements.txt
```

###つづき

[ebでPython環境構築してみた Flaskアプリケーションデプロイ編](http://qiita.com/Yuki_BB3/items/344e4e3cef30b813c9bc)