2016年12月14日
AWSでWordPressを使用したスムーズで簡単な構築
(2016-10-31)by Andreas Wittig
本記事は、原著者の許諾のもとに翻訳・掲載しております。
WordPressはクラウド・レディでもサーバレスでもないので、私はあまり好きではありません。このブログは CloudFront と S3 を使用し、 Hexo で構築しています。しかし、なんと Webサイトの25%がWordPressを使って作成されているのです 。そこで、AWSでWordPressを構築する最も簡単な方法を説明します。フォールトトレランスとスケーラビリティを含んだ内容です。
次の図は、AWS上でフォールトトレラントかつスケーラブルなWordPress環境を構築する際のアーキテクチャを表しています。
注釈:Elastic File System(EFS)
MySQL(マスター)
MySQL(スタンバイ)
WordPressを実行するEC2インスタンス
ロードバランサ
CDN
詳しく見ていきましょう。
問題点
WordPressは、MySQLのデータベースとディスク上のファイルという2つの異なるデータストレージを使用するPHPアプリケーションです。ファイルをディスク上に保存すると、EC2インスタンス群を使用してフォールトトレラントかつスケーラブルな方法でWordPressを実行する場合に問題が生じます。
次の例と図は、その問題点を表したものです。
- Maryが自分のブログに新しい画像をアップロードする。画像ファイルはES2インスタンス①に保存されている。
- Maryが記事を読み込む。EC2インスタンス①は彼女のHTTPリクエストに応えて、画像を入手する。
- BobがMaryの記事を読み込む。するとEC2インスタンス②がHTTPリクエストに応えて、
404 Not Found
のエラーが出る。画像がEC2インスタンス①だけに保存されているからだ。
面倒なことに、全てのEC2インスタンスでファイルを同期させるか、マネージドサービスにファイルをアウトソースしなくてはいけません。
1つ目の解決策
私は以前、AWSでWordPressを使う際に生じるこの問題を解決しようと試みました。 『AWSでWordPressを使用する:あなたの間違った使い方』 という記事に、解決策の詳細が載っています。
簡単に要約すると、以下のようなものです。
- ユーザがアップロードする画像などをディスクに保存するのではなく、WordPressのプラグインを使ってS3に保存する。
- ディスクにファイルを書き込むWordPressの他の機能を全て無効にする。プラグインやテーマのインストールとアップデート、自動更新機能、
.htaccess
ファイルの書き込みなど。 - 「各EC2インスタンスの起動時に、WordPressを全プラグイン/テーマを含めてインストールする」というプロセスを自動化する。
しかし、プラグインとテーマのインストール機能や、自動更新機能が使えないのは不便です。
2つ目の解決策
Elastic File System(EFS)は2016年にAWSのサービスに追加されました。
EFSは高可用性のスケーラブルなネットワークファイルシステムで、NFSプロトコルを使用してEC2インスタンスに接続できます。ファイルをアウトソースするには完璧な場所です。
次の図は、WordPressを実行する各EC2インスタンスが、どのようにEFSに接続してファイルを読み書きするかを表しています。ユーザがアップロードするものと、WordPressのファイルを区別する必要はありません。
注釈:Elastic File System(EFS)
EC2インスタンス群
EC2インスタンスがEFSからファイルを読み込む際は毎回ネットワーク呼び出しが必要なので、ファイルのキャッシュが重要です。
特に .php
ファイルの場合はそうです。WordPressはリクエストの度に、多くの .php
ファイルにアクセスする必要があるからです。 OPcache を使えば、すぐに解決できるでしょう。
同様に、静的ファイルのキャッシュも必要になります。WordPressのブログの訪問者は、それぞれ同じ .css
ファイルや .js
ファイルを読み込まなければいけないので、CloudFrontのようなCDNが最適です。
これらのサービスに基づいた、AWS上のWordPressのアーキテクチャ完成図は次のようになります。
- CloudFront:動的、静的コンテンツのためのCDN
- ELB(Elastic Load Balancer):EC2インスタンスへリクエストを転送して、SSLを終端させるロードバランサ
- EC2(Elastic Compute Cloud):Webサーバを実行する仮想マシン
- EFS(Elastic File System):WordPressのファイル(WordPressコア、プラグイン、テーマ、ユーザがアップロードするもの)のストレージ
- RDS(Relational Database Service):MySQLのデータベース
注釈:Elastic File System(EFS)
MySQL(マスター)
MySQL(スタンバイ)
WordPressを実行するEC2インスタンス
ロードバランサ
CDN
デプロイ
上記で説明したように、EFSを使用してAWSでWordPressを使いたいですか? 私はCloudFormationのテンプレートを作成しました。次に挙げる特徴を含んだ、求められるクラウドインフラストラクチャの構築が数分で行えます。
- 信頼性:Multi-AZによるフォールトトレランスとスケーラビリティ
- セキュア:HTTPSのみ
- 高速化:CDNが静的コンテンツをキャッシュ
- 発展:ユーザのアップロードに対応できるスケーラブルなファイルストレージ
AWSでWordPressを使うためのCloudFormationのテンプレートについて 詳しく知り 、数分でスタックをローンチしてみてください。
以下の書籍と記事をお薦めします。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa