みなさんこんにちは。(っ´∀`)っ ゃーこと濱田です。前回、AWSでWordPressを冗長構成で構築してみましたが、フロントエンドを冗長化していませんでしたので、今回はフロントエンドも冗長化してみたいと思います。
■ ざっくりとした構成
上記の図のとおり、クライアントからのアクセスはElastic Load Balancer ( ELB ) からEC2インスタンスに振り分けられます。DBはMulti-AZ DeploymentをYesにして構築しています。今回、新しく登場したのが真ん中の青いバケツ、S3 ( Scalable Storage in the Cloud ) になります。これはELB配下にあるすべてのインスタンスから画像をアップロードします。
■ What's S3?
AWSのS3は、インターネット用のストレージサービスです。99.999999999%の堅牢性と、99.99%の可用性を提供するよう設計されており、2つの施設での同時のデータ喪失を防ぐよう設計されているため、各々のEC2インスタンスから繋ぐ作業さえしてしまえば、煩わしいストレージ運用の手間から開放されます。
■ バケットを作成する
AWSのコンソール画面からS3のコンソール画面に繋ぎます。バケットの名前とリージョンを指定して「Create」ボタンを押せばもうできあがりです。
■ EC2からS3へ繋いでみる
最初は2つのEC2インスタンスからs3fsで繋いでみたのですが、S3のバケットにファイルをアップロードするのにもの凄く時間がかかったため、どうせ同期を取る対象は画像くらいだと割り切ってWordPressのプラグイン「Amazon S3 for WordPress」を使って画像のみをS3のバケットに放り込むことにしました。
というわけで、ここまでの時点でやったことは
- EC2インスタンスを偶数個作成。←の手順では省略しましたが、インスタンス作成時に、同じリージョン内でもAvailability Zoneは等数に分けておきましょう。
- RDSの設定。インスタンス作成に少々時間がかかるので、インスタンス作成後すぐにやっておきたいところです。
- ELBの設定。配下に置きたいインスタンスを最初からすべて追加してもよいのですが、最初は1つだけにしておきます。そしてWordPressをインストールし、プラグインのページから「Amazon S3 for WordPress」をインストールし有効化します。「Amazon S3 for WordPress」のパラメータは↓に書いておきます。
- WordPressインストール完了後に、WordPressを構成するファイルをすべてのインスタンスにコピーし、それから全てのインスタンスをELBの配下に置いたほうがファイルの整合性が取れてよいです。
ここまでできたら、WordPressの管理画面から、Amazon S3の設定をしましょう。手順は前佛さんの○パクりです。いつもありがとうございます。設定時にこちらからアクセスキーとシークレットアクセスキーをコピペします。
プラグインの設定画面では、下記の図のように、「Use Amazon S3 for storage ~~~」と「Make sure all files~~~」の2ヶ所にチェックを入れ、画面左下の「save>」をクリックします。
それでは実際に投稿してみましょう。メディアの追加は、通常の「メディアを追加」ではなく赤丸で囲まれたボタンをクリックします。あとの手順は、通常のメディア追加と一緒です。
投稿が終わったら、画像を別タブで開いてみましょう。URLからS3バケットにアップロードされたことがわかります。
上記の図のように、 http://バケット名.s3.amazonaws.com/wp-content/uploads/YYYY/MM/画像名.jpg となっています。実際にバケットの中を見てみましょう。
しっかりとバケットの中にコアラの画像とサムネイルが生成されています。これでAWSを用いたWordPressの簡単な冗長化ができました。新たにEC2インスタンスを作成し、同じELBの配下に追加してあげてドキュメントルート配下をコピーするだけで、冗長化の多重度を上げることもできます。夢は広がるばかりですねー。
[amazonjs asin="479736758X" locale="JP" title="本格ビジネスサイトを作りながら学ぶ WordPressの教科書"]