LoginSignup
55

More than 5 years have passed since last update.

WordPressをAWS上で簡単にスケールアウトする方法

Last updated at Posted at 2015-04-15

追記:2015/05/01

WordPress HTTPSと、Nephila clavata (絡新婦)を使って、複数ドメイン+S3メディアで運用すると、正常にS3にアップロード出来ないことがありました。原因はまだ深堀りできてないです。そこで、別のプラグインでS3にアップロードするようにしてみました。

使うプラグイン

Nephila clavata (絡新婦)の代わりに、Amazon S3 and CloudFrontを使用します。設定方法なんかは、あまり変わりません。

Amazon S3 and CloudFrontの注意点

Nephila clavata (絡新婦)と同様に、メディアを自身のサーバとS3にアップロードしてくれるという点では同じですが、Amazon S3 and CloudFrontは既存のファイルに関してはなにもしてくれません。Pro版でそういった機能が使えるよーみたいのは書いてありましたが。なので、すでに動いてしまっているサービスの場合、手動でS3へのアップロードと、DBのデータ修正をする必要があります。

S3へのアップロードは、単純にwp-content/uploadsディレクトリをアップロードするだけです。

DBのデータ修正というのは、このメディアファイルはS3にあるよーというのをAmazon S3 and CloudFrontプラグインに教える必要があるためです。形式は以下のとおり。

  • テーブル : wp_postmeta
post_id meta_key meta_value
wp_posts.ID amazonS3_info serializeデータ

コードで書くならこんな感じです。

$data = (
    'bucket' => 'bucket-name', // S3バケット名
    'key' => 'wp-content/uploads/ファイル名',
    'region' => 'ap-northeast-1', // 東京
);

sprintf(
    'insert matome_postmeta (post_id, meta_key, meta_value) values (%d, "%s", "%s"); ',
        $post_id,
        'amazonS3_info',
        serialize($data));

これで、今のところ上手くスケールアウトしつつメディアはS3で単一という構成ができています。

追記終わり。

WordPress便利ですよね。カスタマイズしていくと、色々大変ですが。そんな便利なWordPressですが、うっかりすると大変重く、死ぬことがあります。キャッシュさせるとか方法は昔から色いろあるんですが、インフラレベルで、対応できたほうが良かろうもんということで、WordPressをスケールアウトさせてみました。

目指した最小構成

wordpress.png

AWSのELB + EC2 + RDS + S3です。管理画面だけ別ドメインとしてサーバを切り出しています。これには理由があります。すでに稼働しているWordPressをスケールアウトさせるには、すでにアップロードされている画像の処理に困ってしまうためです。

まっさらな状態でスタートする場合は、管理画面を特に分けずともいけるかもしれません。ただ、分けておくと便利なこともあるので、この構成をお勧めします。

RDSに関しては、単純にインスタンス作ってデータベースの接続情報を入力するだけなので簡単ですね。ElasticCacheのmemcachedを使って、フロントのキャッシングをさせたりするのも良いですね。

使うプラグイン

この2つのプラグインを使用します。

Nephila clavata (絡新婦)

もうネーミングが良いですね。このプラグインは、画像などのメディアファイルをAWS S3にアップロードしてくれるやつです。S3にアップロードするプラグインは、他にもありますが、ひと味違います。

  • 既存の画像もS3にアップしてくれる
  • S3と今までどおりサーバ上、両方に保存する
  • プラグインを無効にした場合、サーバ上の方に切り替わる

これによって、途中からS3に切り替えた場合でも対応できます。ただし、既存の画像をS3にアップするのは、ユーザがページを閲覧した時the_content wp_get_attachment_urlのフィルターフックを使って行っているので、予めS3にファイルをアップロードさせておいたほうが、負荷は少なくなるでしょう。

設定の仕方も、AWSのAccess Keyやバケット名を入力するだけなので簡単です。

WordPress HTTPS

WordPressは、wp_optionsテーブルに保存されているoption_name=siteurlなURLが絶対的な権力を握っているため(嘘)、Apacheなどで別ドメインを割り当てて管理画面にアクセスすると、本来のURLにリダイレクトして戻されてしまします。本当に面倒ですね。

そこで、WordPress HTTPSプラグインを使って、管理画面に別ドメインを割り当てることにします。

設定方法も簡単で、プラグインを有効にした後、HTTPSの設定から別ドメインを入力するだけです。

スクリーンショット 2015-04-16 8.50.14.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55