AWS EC2 + RDS 環境で Django, syncdbするところまで
AWS EC2にインスタンス(Amazon Linux)を作成し、そこでDjangoアプリケーションを開発する環境を整えました。
まぁ、EC2の環境に作ろうが作るまいが、要はLinux環境に作るって事なので、分かっている人にはなんてことはない簡単すぎる内容ですが、僕と同じような初心者の誰かが、少しでも楽できればと思いメモ書きを残します。
MySQLを使えるようにする
EC2でつくったばかりのインスタンスにはMySQLは入っていません。RDSを使うからいいや、という分けにも実際はいかないので(mysqlコマンドはいずれ必要)、まずはMySQLそのものをインストールしたいと思います。
MySQLがまだインストールされていないこと、および利用可能なパッケージをyumコマンドでチェックし、特に問題なければインストールします。
インストールされている場合は「インストール済みのパッケージ」と表示されますが、「利用可能なパッケージ」となっているのでまだインストールされていない事がわかります。では早速インストールしましょう。
次に、DjangoでMySQLを使用するには、MySQLのPythonインタフェースであるMySQLdbが必要になります。 このタイミングでインストールしておきたいと思います。(別に後でも全然問題ないです)
これまでと同様に、まずはMySQLdbについてyumコマンドで念のため確認しみてみます。
Djangoに必要なバージョンであることを確認できたのでインストールします。
インストール:
MySQL-python.x86_64 0:1.2.3-0.3.c1.1.9.amzn1
依存性関連をインストールしました:
mysql55-libs.x86_64 0:5.5.38-1.0.amzn1
完了しました!
RDSのMySQLをつなぐ
RDSのデータベースを利用するには、RDSでDBインスタンスを作った後に、EC2のインスタンスのポートをRDS用に開く必要があります。
(素人なので、EC2のヘルプドキュメントを何回も読み直してようやく接続ができたので誰かの検索の役に立てればいいなと思います。)
RDSのDBインスタンス起動(登録)
RDSにDBインスタンスを登録するところは、こちらのドキュメントから読み進めるとできます。
ただ、先ほども書いたように、EC2インスタンスから接続するには、DBセキュリティグループのポートを開いてあげる必要があります。
設定は、EC2コンソール画面の左のメニューの"Security Groups"から、該当するDBセキュリティグループを選択し、Inboundルールで、MySQLの"3306"を開いてあげれば完了です。
RDSのDBインスタンスへの接続
ここまでできたら、実際にEC2インスタンスからRDSのDBへ接続できるか、mysqlコマンドで試してみましょう。
まずは、DBインスタンスのEndpointを確認してください。これがそのDBのホスト名になります。
EC2のインスタンスにログインして、以下のコマンドで問題なく接続できればOKです。
Your MySQL connection id is 61
Server version: 5.6.17-log MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Djangoをインストールする
OSがLinuxなのでPythonは入っているはずですが、PythonのWebフレームワークであるDjangoを動かすには、2014年6月現在Python2.5~2.7のバージョンが必要です。
Pythonがインストールされているということを確認すると同時にバージョンも問題ない事を一応チェックしておきたいと思います。
インストール済みのPythonのバージョンは問題ないようなので、Djangoをインストールします。
Python関連はpipで管理するのが簡単なのでpipコマンドを叩こうとするも、インスタンスを作った状態ではそもそもpython-pipがインストールされていません。確認してみましょう。
ということで、まずpipをインストールしてから、Djangoパッケージをインストールします。
次にDjangoをインストール。
できました。要はこの環境へのインストールであれば、pipとDjangoのインストールを2行のコマンドでやれば済むということになりますね。
DjangoでMySQLを使うプロジェクトを立ち上げてsyncdbする
ここから先は、Djangoのチュートリアルドキュメントを見ながら進めていきます。settings.pyにRDSにて起動したMySQLの情報を正しく設定すれば、syncdbできるようになるはずです。
まずは、Djangoでプロジェクトを立ち上げます。(≒「よし、Webアプリ作るぞ!」みたいなもんです)
生成されるフォルダはこんな感じ:
hoge/
|- manage.py
|- hoge/
|- __init__.py
|- settings.py
|- urls.py
|- wsgi.py
いろいろ省略しますが、設定ファイルのsettings.pyで、DATABASESのところにデータベースエンジン(今回はMySQLを使用)やRDSで起動したMySQLの情報を入力します。(settings.pyの詳細はチュートリアルドキュメントをご覧ください)
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<db_name>',
'HOST': '****.*****.ap-northeast-1.rds.amazonaws.com',
'USER': '<user>',
'PASSWORD': '<password>',
}
}
'HOST':前述したEndpointのポート番号の部分を除いた文字列
<user>:管理ユーザ名(RDSで"Username"の箇所)
<password>:管理ユーザのパスワード
他にもsettings.pyのINSTALLED_APPSなど必要に応じて編集していただき準備が整ったら、一番上のhogeの階層でmanage.pyをたたいてください。
INSTALLED_APPSの設定にもよりますが、指定した(もしくはデフォルトの状態からコメントアウトしていない)アプリに関係するデータベーステーブルが作成されます。
いくつかCreating〜というコメントが出て、途中で場合によってはスーパーユーザの登録を聞かれつつ、データベーステーブルが自動でRDSのMySQLに作成されます。
正しくsettings.pyが設定されていない場合は、いろいろエラーが出ますが、無事にsyncdbは完了しましたでしょうか?上の方でやったRDSのMySQLに接続して、テーブルができているか確認したいと思います。
パスワードを入れたら、MySQLのプロンプトが出てくるので、ここから先はMySQLのコマンドをたたいていきましょう。
| Database |
+--------------------+
| information_schema |
| innodb |
| mysql |
| <db_name> |
| performance_schema |
+--------------------+
<db_name>というのが自分が今回作ったデータベースなので、それに切り替えます。
最後に、いよいよテーブルを確認しましょう。
| Tables_in_officedb |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
(省略)
+----------------------------+
という訳で、無事にRDSのMySQLにつながって、syncdbができました!
ここから先は、ひたすらDjangoのドキュメントにしたがっていろいろ試してみてください!
では!