簡単に AWS EC2 にPython3 + Tornado の動作環境を構築した。


概要

Pythonを始めよう! 〜①環境構築編〜」の記事を参考にローカルに開発環境が構築できたので、今度は運用開始に向けて、 EC2 に Python3 + Tornado の動作環境を最小手順で作成してみました。

作業時間目安:10分

本番運用ではフトンロエンドでReactを利用し、バックエンドでTornadoを利用予定です。

目標

ブラウザから EC2 にアクセスして 「Hello, world」が表示されることを目標とします。

構築内容

  1. Amazon Linux
  2. Python 3.5.2
  3. Tornado 4.4

Python3 インストール手順

01 . 必要な依存関係をインストールします。

$ yum groupinstall "Development Tools"
$ yum install mlocate
$ yum install openssl-devel
$ yum install bzip2-devel
$ yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite3 sqlite-devel openssl-devel

02 . Pyenvをインストールします。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

03 . Pyenv のパスを通します。

$ vim ~/.bashrc
-----
# Add Pyenv Path
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi

設定を即時反映する。

$ source ~/.bashrc #.bashrc

04 . Python をインストールします。

Python のバージョンを確認する。

$ pyenv install --list

Python3 をインストールする。

$ pyenv install 3.5.2

Python のバージョン 2.7.12から 3.5.2に切り替える。

$ python -V
Python 2.7.12
$ pyenv global 3.5.2
$ python -V
Python 3.5.2

Tornad インストール手順

01 . pip を最新に更新します。

$ pip install --upgrade pip

02 . Tornadoをインストールします。

$ pip install tornado

Hello world プログラム準備

今回は /home/ec2-user/helloworld/ の直下にプログラムを配置します。

helloword.py
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

動作確認

01 . Hello world プログラムを実行する。

# python helloworld.py

02 . Portを指定したURLでブラウザからアクセスする。

e.g.) http://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:8888

※ もしもうまく表示されないときは AWSのSG設定で8888ポートが開いているか確認してみてください。

終わりに

思った以上に簡単に環境構築ができたので、環境構築に敷居を感じる方はこの記事を参考に挑戦してみてください。
元々はPHPerだったのですが、Pythonに手を出し初めたので、調査した内容を記事にまとめていきたいと思います。
今後はTornadoを利用して、RESTfulなAPIサーバ構築していくために調査した内容で記事を作成予定です。