はじめに
WordPress サーバーをスケールアウトする際にまず問題となるのが、メディアファイルによって Web サーバーがステートフルになってしまうことである。
AWS で構築するのであれば S3 にオフロードするのが筋なのはわかるが、いかんせん WordPress コアでは S3 へのオフロードをサポートしていないので一手間かける必要がある。
- s3fs 等を使って S3 をマシンへマウントする
- cron で定期的に
s3 sync
など - S3 オフロード用のプラグインを使用する
- NFS、EFS
1.は不安定な印象が強いので避けたい。2.もなんか微妙だなぁ。 となると、3.くらいしか無い。
え、NF……なに、聞こえねーな。
S3 オフロード用プラグイン
そのうち、W3 Total Cache
(W3TC) ならば、メディアファイルに加えてテーマファイルや CSS ファイルもオフロードできるし、AWS の Whitepaper で紹介されているので 間違いないだろうということで試してみた。
※ WP Offload Media Lite
導入に関しては、弊サイトにもすでに記事があった……!!
設定方法
W3TC は S3 オフロード用プラグインというわけではなく、その他にも様々な機能が搭載されているので設定項目の量が膨大だが、とりあえず S3 オフロード設定のみを施す想定。
S3 バケット準備
普通に作成。
一般公開用バケットポリシーを設定。
{ "Version": "2008-10-17", "Id": "AccessRestriction", "Statement": [ { "Sid": "PublicAccess", "Effect": "Allow", "Action": "s3:GetObject", "Principal": { "AWS": "*" }, "Resource": "arn:aws:s3:::<your_bucket_name>/*" } ] }
S3 アップロード用 IAM ユーザー準備
プログラムによるアクセス
だけで良い。
先に作成したバケットに対するアクセス権限のみ許可。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<your_bucket_name>", "arn:aws:s3:::<your_bucket_name>/*" ] } ] }
更新ボタンを押してから作成したポリシーを検索して選択。
CSV を忘れずに保存。
W3 Total Cache プラグインのインストール
普通にインストールして有効化。
W3 Total Cache 設定 (General Settings)
S3 オフロード以外の機能が不要な場合はすべて無効化。
CDN
を有効化して、S3 を選択。
W3 Total Cache 設定 (CDN)
先程作成した S3 アップロード用 IAM ユーザーのアクセスキーとシークレット、S3 バケット名、リージョンを設定。
General
部分はとりあえずデフォルトで。
無効になっている意味がよくわからないので Use CDN links for the Media Library on admin pages
を有効化。
Export changed files automatically
も有効化したほうが良くないか?
設定画面上部にこんなメッセージが表示されているはずなので、これらのボタンを押下して、既存の静的ファイルをアップロード。
done
になれば大成功。
記事に貼り付けた画像などが S3 から配信されることを確認。
おわりに
- このプラグインは独自ファイル (
/wp-content/w3tc-config/master.php
など) を作成したり、.htaccess
の変更を行っているみたいなので要注意