WordPress on AWSでAmazon Elastic File System(EFS)を試してみた
おはようございます、城内です。 今年の梅雨は、昨年よりもなんとなくジメジメする日が続いて、気分もなんとなくどんよりです。何か良い気分転換がありましたら、ぜひ教えてください。
今回は、プレビュー版のAmazon EFSを試すべく、WordPressの構成に組み込んでみたいと思います。
構成図
今回は、以下のような構成で動作検証を行います。
いままでのWordPress on AWS構成では、Elastic Beanstalkを使用するのがベターでしたが、今回EFSを使用するとなると、なんとなくElastic Beanstalkの仕組みが複雑さを生んでしまうような気がしたので、とりあえず外してみました。
もしもっと最適な構成が思いつきましたら、その時はまた新しい記事を書きたいと思います。
EFSの作成
EFSの作成については、以下の記事を参考にしてください。かなり簡単にできます。
出来上がりは以下の通りです。
Web/DB環境の作成
WordPress用のWeb/DB環境については、過去の記事を参考にしつつ、上記構成図を目指して作成してみてください。
■サブネット
■EC2
■ELB
■RDS
■CloudFront
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の初期画面までたどり着けます。
上記はELBにアクセスしています。EFSはWebサーバにもマウントされており、これで、MasterサーバからEFSに配置したWordPressのプログラムが正常に共有され動作していることになります。
動作確認
いよいよ動作確認を行いたいと思いますが、初期画面以降のセットアップは以下の記事を参考に実施してください。
動作確認としては、Masterサーバからテーマのインストールと変更を行い、それがWebサーバ側でも反映されているかどうかを確認します。
まずは、適当なテーマをインストールします。このとき、バックグラウンドでは関連ファイルがダウンロードされ、EFS上に展開されています。
インストールが完了したら、「有効化」をします。
Masterサーバの管理画面上では、インストールした新しいテーマが有効になっています。
Webサーバにアクセスすると、以下のようにインストールした新しいテーマに変わっていることが確認できます。
以上、EFSを介して、テーマの関連ファイルが正常に共有されていることが分かりました。
所感
いままでのAWSでは、共有ファイルストレージがなかったため、自前でNFSサーバを構築したり、rsyncで定期的にファイル同期を行うなどして対処してきました。そのため、EFSに対するニーズはかなり高いと思います。
今回は、シンプルにWordPressへの適用を確認するだけでしたが、ファイル書き込みの速度が少し気になったので、今後はパフォーマンス等の検証もしてみたいと思います。