WordPress基本構成パターン6 CloudFront+ec2インスタンス

こんにちは。hacknoteのr.katoです。

この記事はAWSをよく知らない人向けAWSのWordPress基本構成パターン8つのパターン6の作成方法を紹介する記事です。
そのまま真似をすれば誰でもAWSを使ってWordpressの入ったタイトル通りの構成のサーバーを建てる事ができます。

CloudFrontの構築方法

まずはWordPress基本構成パターン1-EC2インスタンス1台で用意した物と同じ状態のEC2インスタンスを用意します。
そして、赤枠内にあるパブリックDNSを控えておきます。後で使います。

AWSコンソールのサービスの中のCloudFrontにアクセスします。
そして、 Create distribution => Web Get Startedと進んでいきます。

画像と同じように設定していきます。
Origin Domain NameにはEC2のパブリックDNSを、Alternate Domain Namesには後ほどRoute53に登録するドメインを入力してください。
Origin IDはOrigin Domain Nameを入力後、自動で入力されるので入力する必要はありません。

Whitelist HeadersにはUser-agentを入力してください。

そして、Create Distributionをクリックするとセットアップが始まります。大体15分〜25分ほどかかるので、その間にDNSの設定やCloudFrontの追加設定を済ませます。

今回作成したCloudFrontのIDをクリックしてCloudFrontの詳細設定画面に移り、追加設定をしていきます。

Invalidationsタブをクリックし、Create Invalidationをクリックします。

次の画像のように/*を入力してInvalidateをクリックしてください。

もし、SSL化をする場合はこちらの記事を参考にしてください。

DNSの設定

こちらの記事を参考にして”Hosted Zones”の設定まで済ませます。
そして、次の画像の赤枠の中に書かれている、CloudFrontのDmainNameを控えます。

そして、”AWSコンソール => Route53 => Hosted Zones => 作成したDomain”の中に入ります。
そして、Create Record Setをクリックし、

Nameに任意の文字列、AliasをYesにし、Alias Targetに控えたCloudFrontのDmainNameを入力し、Createをクリックしてください。

そして、chromeなどのWebブラウザでサーバーのIPアドレスでWordpressにアクセスします。
Settingsをクリックし、赤枠の中身をRoute53で設定した、Domainを入力すると、設定は終了です。

後はCloudFrontのセットアップが終わり次第、CloudFrontを通しての接続ができるようになります。

アクセス速度テスト

Apacheに同梱されているABコマンドを使って北米リージョンにあるEC2インスタンスからアクセス速度テストをしました。
CloudFrontを通してアクセスした時の方が、直接サーバーにアクセスした時より早ければ今回の構成は上手く働いていることになります。

直接サーバーにアクセスした場合

[root@ip-XXXXXXXX ~]# ab -n 10 -c 10 http://XXX.XXX.XXX.XXX/
---略---
Requests per second:    11.87 [#/sec] (mean)
Time per request:       842.803 [ms] (mean)
Time per request:       84.280 [ms] (mean, across all concurrent requests)
Transfer rate:          6.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      151  156   4.3    159     161
Processing:   231  243  18.3    237     293
Waiting:      231  243  18.3    237     293
Total:        387  398  16.9    396     445
---略---

CloudFrontを使ってアクセスした場合

[root@ip-XXXXXXXXXX ~]# ab -n 10 -c 10 http://XXXXXXXXXXXXXXXXX.XXXXXXXXXX.com/
---略---
Requests per second:    127.49 [#/sec] (mean)
Time per request:       78.438 [ms] (mean)
Time per request:       7.844 [ms] (mean, across all concurrent requests)
Transfer rate:          10653.07 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.0      1       1
Processing:    13   27  23.1     14      64
Waiting:        6   24  24.6     10      63
Total:         13   28  23.1     14      65
---略---

Requests per secondとTransfer rateの数値が高いほうが良く、他の数値が低いほうが良いとされます。

圧倒的にCloudFrontを使ってアクセスした場合の方が早いです。
同じリージョンからアクセスした場合はCloudFrontの設定を上手くしないと直接サーバーにアクセスした場合とどっこいどっこいですが…

さいごに

ABテストで負荷をかけていたら偶然MySQLが落ちました。
通常、直接サーバーにアクセスする構成になっていた場合、MySQLが落ちた場合、次の画像が出てきてアクセスできなくなります。

しかし、CloudFrontを使ってアクセスしていた場合、キャッシュが残っている限りアクセスすることが出来ます。
次の画像はMySQLが落ちている時にCloudFrontを使ってアクセスした時の画像です。

偶然、CloudFrontを使っていた場合のMySQL障害の再現ができました。

細かい設定

実際にWordpressをデプロイするには上記のCloudFrontの設定だけでは不十分です。
記事を投稿しても即時反映はされなかったりします。
自分のWordPress用にちゃんとwp-adminをキャッシュさせないなど設定しましょう。
詳しくはこちらを参照して追加設定を行ってください。