WordPress on AWSでAmazon Elastic File System(EFS)を試してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

おはようございます、城内です。
今年の梅雨は、昨年よりもなんとなくジメジメする日が続いて、気分もなんとなくどんよりです。何か良い気分転換がありましたら、ぜひ教えてください。

今回は、プレビュー版のAmazon EFSを試すべく、WordPressの構成に組み込んでみたいと思います。

構成図

今回は、以下のような構成で動作検証を行います。

overview_02

いままでのWordPress on AWS構成では、Elastic Beanstalkを使用するのがベターでしたが、今回EFSを使用するとなると、なんとなくElastic Beanstalkの仕組みが複雑さを生んでしまうような気がしたので、とりあえず外してみました。

もしもっと最適な構成が思いつきましたら、その時はまた新しい記事を書きたいと思います。

EFSの作成

EFSの作成については、以下の記事を参考にしてください。かなり簡単にできます。

出来上がりは以下の通りです。

efs_01

Web/DB環境の作成

WordPress用のWeb/DB環境については、過去の記事を参考にしつつ、上記構成図を目指して作成してみてください。

■サブネット

subnet_01

■EC2

ec2_01

■ELB

elb_01

■RDS

rds_01

■CloudFront

cf_01

EFSの自動マウント

EFSのマウントに関して、少し補足しておきたいと思います。今回は、以下のようにユーザデータを使用しました。

#cloud-config
locale: ja_JP.UTF-8
timezone: "Asia/Tokyo"
packages:
 - php
 - php-mysql
 - php-gd
 - php-xml
 - nfs-utils
runcmd:
 - cp -p /etc/php.ini /etc/php.ini.org && sed 's%;date.timezone =%date.timezone = "Asia/Tokyo"%' /etc/php.ini.org > /etc/php.ini
 - service httpd start
 - chkconfig httpd on
 - mount -t nfs4 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).fs-1234abcd.efs.us-west-2.amazonaws.com:/ /var/www/html

以下のような感じです。

$ df -h
ファイルシステム                                      サイズ  使用  残り 使用% マウント位置
/dev/xvda1                                             7.8G  1.2G  6.6G   15% /
devtmpfs                                               490M   56K  490M    1% /dev
tmpfs                                                  499M     0  499M    0% /dev/shm
us-west-2a.fs-1234abcd.efs.us-west-2.amazonaws.com:/   8.0E     0  8.0E    0% /var/www/html

あと、一応Masterサーバについては、EIPを自動でアタッチするようにしています。

runcmd:
 - aws ec2 associate-address --allocation-id "eipalloc-1234abcd" --region "us-west-2" --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id)

WordPressのセットアップ

WordPressのプログラムは、WORDPRESS.ORG 日本語のサイトからダウンロードしました。
.tar.gz形式でダウンロードして、MasterサーバにSFTPでアップロードし、展開します。

$ pwd
/tmp
$ ll wordpress*
-rw-r--r-- 1 ec2-user ec2-user 6773205  7月  9 02:56 wordpress-4.2.2-ja.tar.gz
$ tar zxvf wordpress-4.2.2-ja.tar.gz
wordpress/
wordpress/wp-mail.php
wordpress/wp-load.php
wordpress/wp-content/
...
$ ll -d wordpress*
drwxr-xr-x 5 ec2-user ec2-user    4096  5月  7 13:26 wordpress
-rw-r--r-- 1 ec2-user ec2-user 6773205  7月  9 02:56 wordpress-4.2.2-ja.tar.gz

展開されたwordpressディレクトリ配下のファイルを、/var/www/html/ディレクトリ配下に移動します。
ついでに、少し上の階層からオーナーとグループを変更しておきます。

$ sudo mv wordpress/* /var/www/html/
$ ll /var/www/html/
合計 188
-rw-r--r--  1 ec2-user ec2-user   418  9月 25  2013 index.php
-rw-r--r--  1 ec2-user ec2-user 19930  1月  1  2015 license.txt
-rw-r--r--  1 ec2-user ec2-user 10209  5月  7 13:26 readme.html
-rw-r--r--  1 ec2-user ec2-user  4951  8月 21  2014 wp-activate.php
drwxr-xr-x  9 ec2-user ec2-user  4096  5月  7 13:26 wp-admin
-rw-r--r--  1 ec2-user ec2-user   271  1月  9  2012 wp-blog-header.php
-rw-r--r--  1 ec2-user ec2-user  5007  1月  8 16:05 wp-comments-post.php
-rw-r--r--  1 ec2-user ec2-user  3727  5月  7 13:26 wp-config-sample.php
drwxr-xr-x  5 ec2-user ec2-user  4096  5月  7 13:26 wp-content
-rw-r--r--  1 ec2-user ec2-user  3115  3月 18 08:38 wp-cron.php
drwxr-xr-x 12 ec2-user ec2-user  4096  5月  7 13:26 wp-includes
-rw-r--r--  1 ec2-user ec2-user  2380 10月 25  2013 wp-links-opml.php
-rw-r--r--  1 ec2-user ec2-user  3123  4月 13 06:29 wp-load.php
-rw-r--r--  1 ec2-user ec2-user 34241  4月 13 06:29 wp-login.php
-rw-r--r--  1 ec2-user ec2-user  8252  7月 17  2014 wp-mail.php
-rw-r--r--  1 ec2-user ec2-user 11048  4月 13 06:29 wp-settings.php
-rw-r--r--  1 ec2-user ec2-user 25152 12月  1  2014 wp-signup.php
-rw-r--r--  1 ec2-user ec2-user  4035 12月  1  2014 wp-trackback.php
-rw-r--r--  1 ec2-user ec2-user  3032  2月 10  2014 xmlrpc.php
$ sudo chown -R apache:apache /var/www

※パフォーマンスの検証は次回以降で実施しようと思いますが、感覚的にファイルの書き込みには少し時間がかかるようです。

以上でWordPressの初期画面までたどり着けます。

wp_01

上記はELBにアクセスしています。EFSはWebサーバにもマウントされており、これで、MasterサーバからEFSに配置したWordPressのプログラムが正常に共有され動作していることになります。

動作確認

いよいよ動作確認を行いたいと思いますが、初期画面以降のセットアップは以下の記事を参考に実施してください。

動作確認としては、Masterサーバからテーマのインストールと変更を行い、それがWebサーバ側でも反映されているかどうかを確認します。

まずは、適当なテーマをインストールします。このとき、バックグラウンドでは関連ファイルがダウンロードされ、EFS上に展開されています。

wp_02

インストールが完了したら、「有効化」をします。

wp_03

Masterサーバの管理画面上では、インストールした新しいテーマが有効になっています。

wp_04

Webサーバにアクセスすると、以下のようにインストールした新しいテーマに変わっていることが確認できます。

wp_05

以上、EFSを介して、テーマの関連ファイルが正常に共有されていることが分かりました。

所感

いままでのAWSでは、共有ファイルストレージがなかったため、自前でNFSサーバを構築したり、rsyncで定期的にファイル同期を行うなどして対処してきました。そのため、EFSに対するニーズはかなり高いと思います。

今回は、シンプルにWordPressへの適用を確認するだけでしたが、ファイル書き込みの速度が少し気になったので、今後はパフォーマンス等の検証もしてみたいと思います。