みなさんこんにちは。すっかり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)します。
こちらもいつものように、Classic WizardからAMIを選択することにします。
すっかりお馴染み Amazon Linux AMIの64bitマシンを選択します。
ここではデフォルトのT1 Microでインスタンスを1つ作成します。
インスタンスの詳細オプションも、デフォルトのままにします。
ストレージの設定もデフォルトのままにします。
タグ付けは省略して次へ進みます。
鍵ペアは、過去に作成したcoaraを使います。
セキュリティグループですが、過去に単一のWEBサーバを構築したときに使ったものがあるので、これを使います。外部のネットワークからsshとhttpを受け付ける設定になっています。
ここまでの設定が正しいかを確認します。
インスタンスが起動されたので、Closeをクリックします。
それではssh接続のためにアドレスを確認してみましょう。
ここまでできたところで、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をクリックします。
それでは起動してみましょう。
WordPressが標準で使うDB MySQLを選択します。
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
※1 フロントエンド側のmysqlパッケージとメジャーバージョンが同じものを選んだ方が無難です
※2 真面目に性能要件を詰めるような場合はプロビジョンドIOPSを設定するとよいようです
次の画面で、mysqlのデータベース名、ポート番号などを入力します。データベース名は自身で決めたものを入力し、あとはデフォルトの値にしておきましょう。
データベースの自動バックアップを行うかどうかを選択します。ここではYesを選択し、1日ごとのバックアップ(デフォルト)を行うこととします。その他のパラメータはデフォルトのままにしておきます。
確認画面で、意図した通りのパラメータになっているかどうかを確認しましょう。問題なければLaunch DB Instanceボタンをクリックします。
これでRDSの基本的な設定はほぼおしまいです。Closeボタンをクリックします。
RDSのコンソール画面に戻るので、Statusがavailableになるまで待ちましょう。だいたい5GBで2~3分かかります。
■ DBセキュリティグループの編集
RDSのコンソール画面上で「DB Security Groups」をクリックして、セキュリティグループを編集します。すでにdefaultというセキュリティグループがあるので、ここにチェックを入れます。
デフォルトではCIDR/IPでセキュリティグループを設定するようですが、EC2のセキュリティグループを設定することもできます。後者のほうが、理屈ではなく直感的に「このグループを追加しよう」という意図と実設定が関連づけやすいと思うのでおすすめです。Connection Typeから「EC2 Security Group」を選択し、EC2インスタンスに設定したセキュリティグループを選択して追加しましょう。
セキュリティグループの追加も、ほんの少し時間がかかります。Statusがauthorizingからauthorizedに変わればOKです。
EC2からDBインスタンスへの接続先は、DB Instancesの画面で接続したいインスタンスにチェックを入れ、Descriptionタブの「Endpoint:」に書いてあります。
ここまでできたら、RDS側の準備が完了です。EC2のインスタンスからmysqlコマンドで接続してみましょう。
[ (っ´∀`)っ@友の会 ~]$ mysql -u ユーザ名 -h Endpointに書いてある接続先 -p
試しに「show databases;」コマンドを叩いてみると、インスタンス作成時に指定したDB「wordpress」ができていることがわかります。しかし、まだテーブルはできていません(当たり前ですね)。
続いて、WordPressをダウンロードしましょう。
Apacheの設定やドキュメントルートの作成などは省略しますが、wp-config.phpの設定は以下のようにします。
- DB_NAME → wordpress
- DB_USER → nullpopopo
- DB_PASSWORD → DBインスタンスの設定時に入力したもの
- DB_HOST → Endpointのホスト名
それではブラウザからEC2インスタンスのURLを叩いてみましょう。WordPressの初期設定を経て、無事ブログを公開することができました。
もう一度EC2インスタンスからDBに接続してみました。先ほどなかったテーブルができているのがわかります。
いかがでしたでしょうか。ブラウザの数クリックと、ほんの少しのコマンド操作 (wgetでWordPressのダウンロードとtarコマンドでの解凍、wp-config.phpの作成とパーミッションやオーナーの変更)だけで堅牢なDBをバックエンドに持つブログサーバが出来あがりました。
今回、フロントエンド側の冗長化を省略したので、WEBサーバが単一障害点になってしまいましたが、複数のELB配下に複数ゾーンのEC2インスタンスのWEBサーバを構築し、画像やプラグインのディレクトリをインスタンス間で共有することで、フロントエンドからバックエンドまで単一障害点のないブログシステムを作ることができそうです。こちらについては追々記事にしていきたいと思います。でわ~♪
[amazonjs asin="4822211967" locale="JP" title="Amazon Web Services クラウドデザインパターン 設計ガイド"]