[Amazon][EC2][RDS] RDSにデータベースを作成し、EC2のwordpressから接続する


みなさんこんにちは。すっかりAWSのとりこ (っ´∀`)っ ゃーでございます。今日はAWSのRDS(Managed Relational Database Service)にMySQLのデータベースを作成し、EC2にインストールしたWordPressから接続してみたので、その手順をまとめてみました。接続イメージとしては、WEBサーバの背後にDBサーバがあるような感じです。

■ Why use RDS?

RDSはセットアップが簡単で、しかも「Multi-AZ」設定を行うだけで耐障害性の高いDBサーバを構築することができます。セットアップがどれだけ簡単かは、以下に示す手順のように、ブラウザの数クリックだけで作業できることでおわかりいただけると思います。

■ What's Multi-AZ?

Multi-AZとは、異なるAvailability Zone間でレプリケーション環境を構築してくれる仕組みです。これを設定することで、ゾーンAにマスター、ゾーンBにスレーブのDBができ、同期レプリケーションを行ってくれます。ゾーンA障害時には数分でゾーンBに切り替わります。なので、Multi-AZを使ってこそ単一障害点(SPOF)が無くなるというRDSの真価を発揮すると言えましょう。

※ 本来はEC2側も複数用意してELBの配下に置いてこそですが、今回は省略します

それでは作業してみましょう。

■ EC2インスタンスを起動する

いつものように、インスタンスを起動(Launch)します。

WPRDS_20130101_0001

こちらもいつものように、Classic WizardからAMIを選択することにします。

WPRDS_20130101_0002

すっかりお馴染み Amazon Linux AMIの64bitマシンを選択します。

WPRDS_20130101_0003

ここではデフォルトのT1 Microでインスタンスを1つ作成します。

WPRDS_20130101_0004

インスタンスの詳細オプションも、デフォルトのままにします。

WPRDS_20130101_0005

ストレージの設定もデフォルトのままにします。

WPRDS_20130101_0006

タグ付けは省略して次へ進みます。

WPRDS_20130101_0007

鍵ペアは、過去に作成したcoaraを使います。

WPRDS_20130101_0008

セキュリティグループですが、過去に単一のWEBサーバを構築したときに使ったものがあるので、これを使います。外部のネットワークからsshとhttpを受け付ける設定になっています。

WPRDS_20130101_0009

ここまでの設定が正しいかを確認します。

WPRDS_20130101_0010-01 WPRDS_20130101_0010-02

インスタンスが起動されたので、Closeをクリックします。

WPRDS_20130101_0011

それではssh接続のためにアドレスを確認してみましょう。

WPRDS_20130101_0012 WPRDS_20130101_0013

ここまでできたところで、EC2インスタンスにssh接続し、yumコマンドでパッケージのアップデートおよび以下のパッケージをインストールします。

httpd24
mysql55
mysql55-common
mysql55-libs
php54
php54-cli
php54-common
php54-gd
php54-mbstring
php54-mysql
php54-xml
php54-xmlrpc

■ RDSの起動

AWSコンソール左上の「Services」をクリックして、All AWS Services からRDSをクリックします。

WPRDS_20130101_0014

それでは起動してみましょう。

WPRDS_20130101_0015

WordPressが標準で使うDB MySQLを選択します。

WPRDS_20130101_0016

DBエンジンについて、いくつかパラメータを選択します。

  • DB Engine: mysql
  • Lisense Model: GPL (プルダウンメニューはあるが事実上GPL1択)
  • DB Engine Version: MySQL 5.5.27 (デフォルト) ※1
  • DB Instance Class: db.t1.micro
  • Multi-AZ Deployment: Yes
  • Auto Minor Version Upgrade: Yes

さらに同じ画面上で、DBインスタンスの設定を行います。テスト用なので、ストレージのサイズは最小限の5GBにし、あとはRDSから見えるインスタンス名(create databaseで作るデータベース名ではない)とmysqlユーザ名、パスワードを設定します。プロビジョンドIOPSの設定は、今回は行わないのでチェックを外したままにします。※2

WPRDS_20130101_0017

※1 フロントエンド側のmysqlパッケージとメジャーバージョンが同じものを選んだ方が無難です

※2 真面目に性能要件を詰めるような場合はプロビジョンドIOPSを設定するとよいようです

次の画面で、mysqlのデータベース名、ポート番号などを入力します。データベース名は自身で決めたものを入力し、あとはデフォルトの値にしておきましょう。

WPRDS_20130101_0018

データベースの自動バックアップを行うかどうかを選択します。ここではYesを選択し、1日ごとのバックアップ(デフォルト)を行うこととします。その他のパラメータはデフォルトのままにしておきます。

WPRDS_20130101_0019

確認画面で、意図した通りのパラメータになっているかどうかを確認しましょう。問題なければLaunch DB Instanceボタンをクリックします。

WPRDS_20130101_0020

これでRDSの基本的な設定はほぼおしまいです。Closeボタンをクリックします。

WPRDS_20130101_0021

RDSのコンソール画面に戻るので、Statusがavailableになるまで待ちましょう。だいたい5GBで2~3分かかります。

WPRDS_20130101_0022

■ DBセキュリティグループの編集

RDSのコンソール画面上で「DB Security Groups」をクリックして、セキュリティグループを編集します。すでにdefaultというセキュリティグループがあるので、ここにチェックを入れます。

WPRDS_20130101_0023 → WPRDS_20130101_0024

デフォルトではCIDR/IPでセキュリティグループを設定するようですが、EC2のセキュリティグループを設定することもできます。後者のほうが、理屈ではなく直感的に「このグループを追加しよう」という意図と実設定が関連づけやすいと思うのでおすすめです。Connection Typeから「EC2 Security Group」を選択し、EC2インスタンスに設定したセキュリティグループを選択して追加しましょう。

WPRDS_20130101_0025

セキュリティグループの追加も、ほんの少し時間がかかります。Statusがauthorizingからauthorizedに変わればOKです。

WPRDS_20130101_0026 → WPRDS_20130101_0027

EC2からDBインスタンスへの接続先は、DB Instancesの画面で接続したいインスタンスにチェックを入れ、Descriptionタブの「Endpoint:」に書いてあります。

endpoint

ここまでできたら、RDS側の準備が完了です。EC2のインスタンスからmysqlコマンドで接続してみましょう。

[ (っ´∀`)っ@友の会 ~]$ mysql -u ユーザ名 -h Endpointに書いてある接続先 -p

WPRDS_20130101_0028

試しに「show databases;」コマンドを叩いてみると、インスタンス作成時に指定したDB「wordpress」ができていることがわかります。しかし、まだテーブルはできていません(当たり前ですね)。

WPRDS_20130101_0029

続いて、WordPressをダウンロードしましょう。

WPRDS_20130101_0030

Apacheの設定やドキュメントルートの作成などは省略しますが、wp-config.phpの設定は以下のようにします。

  • DB_NAME → wordpress
  • DB_USER → nullpopopo
  • DB_PASSWORD → DBインスタンスの設定時に入力したもの
  • DB_HOST → Endpointのホスト名

WPRDS_20130101_0031

それではブラウザからEC2インスタンスのURLを叩いてみましょう。WordPressの初期設定を経て、無事ブログを公開することができました。

WPRDS_20130101_0032

もう一度EC2インスタンスからDBに接続してみました。先ほどなかったテーブルができているのがわかります。

WPRDS_20130101_0033

いかがでしたでしょうか。ブラウザの数クリックと、ほんの少しのコマンド操作 (wgetでWordPressのダウンロードとtarコマンドでの解凍、wp-config.phpの作成とパーミッションやオーナーの変更)だけで堅牢なDBをバックエンドに持つブログサーバが出来あがりました。

今回、フロントエンド側の冗長化を省略したので、WEBサーバが単一障害点になってしまいましたが、複数のELB配下に複数ゾーンのEC2インスタンスのWEBサーバを構築し、画像やプラグインのディレクトリをインスタンス間で共有することで、フロントエンドからバックエンドまで単一障害点のないブログシステムを作ることができそうです。こちらについては追々記事にしていきたいと思います。でわ~♪