EC2でアプリケーションを動かしていて、ある程度規模が大きくなってきたのでデータベースを別サーバーに分けたいとなる時がある。抜かりないAmazonはRDSでこれに応えてくれる。このサービスを使えばデータベースを分離できる上、データベースだけスケールさせるといったことも可能になる。また、RDSコンソール上からデータベースのパラメーターをいじったりなんてことも出来るため、管理性も向上する。
今回は、WordPressのデータベースをRDSへ分離するという作業をサンプルに、RDSの立ちあげ方、使用方法、RDSへのデータベース移行、WordPressからRDSへの接続方法を解説する。
DB Security Groupの作成
まずはRDSで展開するデータベースのセキュリティ設定から。EC2などと同じく、セキュリティはセキュリティで別個に用意し、RDSのインスタンスへ紐付けるという流れだ。
VPCダッシュボードへのアクセス
https://console.aws.amazon.com/vpc
ここからAWSのVPCダッシュボードへアクセスし、リージョンを選ぼう。
セキュリティグループ一覧へアクセス
ダッシュボードが表示されたら、セキュリティグループの一覧画面へアクセスしよう。
セキュリティグループの作成
セキュリティグループの一覧が表示されるから、上方の『セキュリティグループの作成』をクリックする。
セキュリティグループ名ほかの設定
セキュリティグループのネームタグやグループ名、グループの説明、グループを作成するVPCを設定するウィンドウが表示されるから入力しよう。
入力を終えて『作成』をクリックするとセキュリティグループが作成される。
外部からアクセスできるようにする。
セキュリティグループにひも付けたインスタンス(今回ならRDSインスタンス)にアクセスできるよう、インバウンドルールを設定する。古き良き時代に流行った『ポート開放』ってやつですな。
作成されたグループを選択し、下方にあるタブの『インバウンドルール』を選び、ルールを1つ追加し、タイプを『カスタム TCP ルール』、ポート範囲を『3306』、送信元(RDSインスタンスに対して接続元)のCIDR値(IPアドレス範囲)を入力しよう。EC2からアクセスするならEC2で使っているセキュリティグループの名前を送信元に入力してもいい。
今回はEC2インスタンスに作成したWordPressからRDSへ接続するため、セキュリティグループの名前を設定した。
起動せよ!RDS!
RDSインスタンスへ紐付けるセキュリティグループが出来たので、いよいよRDSを使っていこう。
RDSダッシュボードへアクセス
https://console.aws.amazon.com/rds/
まずはここからRDSダッシュボードへアクセスし、リージョンを選ぶ。
DBインスタンスの起動
左ペインから『インスタンス』を選び、次いで『DBインスタンスの起動』を選ぶ。
データベースエンジンの選択
はじめにデータベースエンジンを選ぶ。今回はMySQLを選んだ。
プランの選択
RDSでMySQLを使う上でのプランを選ぶ。
一年間の無料プラン(画像右)も用意されているから、お試しで使ってみたい人はこのプランから始めるといいだろう。
データベースの詳細設定
ここからはデータベースの詳細を設定していく。各設定について詳しくはこちら DB Setting Table
ここで設定する『Master Username』と『Master Password』は後ほど使うためメモっておこう。※WordPressからデータベースへの接続設定をする際にデータベースのユーザー名とパスワードとして使う。
インスタンスの詳細設定
次にインスタンス自体の設定を行う。
『DB Security Goups』には先程作ったセキュリティグループを選び、『Database Name』を入力し(後ほど使うのでこれもメモ)、『Database Port』にはセキュリティグループ作成の時に指定した3306を入れる。その他の設定はお好みで。各項目について詳しくはこちら RDS Instance Setting Table
インスタンスの起動を確認する
インスタンスの詳細設定が終わったらお疲れ様。インスタンスを起動しよう。首尾よく起動できていればインスタンス一覧画面で確認できる。
数分はステータスが『作成中』のままだから、これが『利用可能』になるまではコーヒーでも淹れて待とう。
データベースの移行
インスタンスが利用可能になったら、データベースを移行していこう。
データベースのエンドポイントの確認
一旦RDSインスタンスの一覧画面へ戻り、作成したインスタンスを選択しよう。画面中ほどにエンドポイントが表示されるからこれをメモしよう。※DBインスタンス名にリージョン名やポート番号などが付いたもの
データベースのバックアップ
まずは現行のデータベースのバックアップをダウンロードする。方法は色々あるけれど、ここではsqlファイルを使うため、WordPressにBackWPupなるプラグインをインストールし、sqlファイルをダウンロードする。
データベース適用の流れ
sqlファイルの新しいデータベースへの適用は次の2ステップで行う。
- RDSインスタンスのMySQLへリモート接続
- sqlファイルを送って現行データベースのテーブルを生成する
手順1の接続元はデータベースのセキュリティグループのインバウンドルールで設定した『送信元』だ。
EC2インスタンスで接続する場合、インバウンドルールに設定したセキュリティグループに紐付いたEC2インスタンスなら何でもいい。
EC2インスタンスの作成
今回はEC2インスタンスを使ってデータベースを移行する。
インバウンドルールで設定したセキュリティグループを持つEC2インスタンスを作成しよう。
EC2インスタンスへのアップロード
今回はEC2インスタンスを使ってリモート接続するため、まずはsqlファイルをインスタンスへアップロードする。
コンソールを開き、次のコマンドを叩こう。(Mac環境)
1 |
scp -r -i <キーペアファイル名・パス> <sqlファイル名・パス> ec2-user@<EC2 DNS>:/<target_directory>/<sqlファイル名> |
EC2からRDSへリモート接続
アップロードがうまくいったらEC2インスタンスへ接続し、sqlファイルのあるディレクトリへ移動する。
次のコマンドでリモート接続を行う。
1 |
mysql -h <エンドポイントからポート番号を除いた部分> -port=3306 -u -p |
テーブルの復元
リモート接続できたらデータベースを選択するために次のコマンドを打とう。
1 |
USE <RDSインスタンス作成時に入力したデータベース名>; |
sqlファイルを適用する。
1 |
SOURCE <sqlファイル名>; |
SOURCEコマンドが終わったらSHOW TABLES; を実行してテーブルが再現されたかを確認しておこう。
データベースの繋ぎ変え
WordPressが動いているサーバー上のwp-config.phpにあるデータベースの接続情報を書き換える。
wp-config.phpを開き、関係する項目の値を次のように書き換えよう。
- DB_NAME : RDSインスタンス作成時に設定したデータベース名
- DB_USER : RDSインスタンス作成時に設定したMaster Username
- DB_PASSWORD : RDSインスタンス作成時に設定したMaster Password
- DB_HOST : データベースのエンドポイント
ここまで終わったらWordPressサイトへアクセスしてちゃんと動いているかを確認しよう。お疲れさまでした。
手を動かして学ぶAWS入門本