[WordPress] メディアの保存先をAmazon S3にする

WordPressのメディア保存先としてAmazon S3を使うための設定をしていきます。

文中では、

  • URL:example.com
  • 画像用のURL:cdn.example.com

とします。それぞれ、ご自身のドメインに置き換えて読んでくださいね。

また、前提として、

  1. Amazon S3に会員登録済み
  2. WordPress用のバケットを設定済み
  3. CDNはCloudFlareを使う & 登録・設定済み

という条件で進めます。もし、これらがまだの方は個別に設定してください。
Amazon S3のバケット名は、ドメイン名になっている必要があるので(この場合はcdn.example.com)、もし別名でバケットを作ってしまっている場合は、新規でバケットを作って、中身をコピーしておいてください。

最後に、2017.7月時点の情報ですので、古くなる可能性もありますので、ご注意ください。

全体の流れとしては、

  1. Amazon S3で必要な設定をする
  2. CDNの設定をする
  3. WordPressで設定をする

という流れになります。

それでは、はじめていきましょう。

[設定 その1] AWSでAmazon S3のバケットをホスティング設定

まずは、Amazon S3のバケットをCloudFlareのCNAMEで転送できるように、ホスティング設定をします。

  1. S3に入る
  2. バケット「cdn.example.com」を選択する
  3. Static website hostingを有効化(このバケットを使用してウェブサイトをホストするを選択)
  4. インデックスドキュメント(特に指定がないなら「index.html」)を入力する
  5. エラードキュメント(特に指定がないなら「error.html」)を入力する
  6. 保存ボタンを押す
  7. もう一度「Static website hosting」を選択して、表示されるエンドポイントのURLをコピーする

これで、前準備が完了しました。

あとは、次の項にあるCloudFlareでの設定をすれば、cdn.exmaple.comというドメインにアクセスすると、Amazon S3のバケットにアクセスされるようになります。

[設定 その2] CloudFlareでcdn.example.com -> Amazon S3のバケットの転送設定をする

次に、CloudFlareで、cdn.example.com -> Amazon S3バケットの転送設定をします。

  1. DNSタブをクリック
  2. レコード種類(デフォルトではA)を「CNAME」にする
  3. Nameを「cdn」とする
  4. Domain Nameに、その1の7でコピーしたエンドポイントのURLを入力する(http://は消す)
  5. Add Recordをクリック

これで、cdn.example.com = Amazon S3のcdn.example.comバケット、となりました。

[設定 その3] WordPressで、メディアの保存先をAmazon S3に設定する

ここからようやく、WordPress内での作業となります。

  1. プラグイン「Amazon Web Services」と「WP Offload S3 Lite」をインストール&有効化
  2. Amazon Web Services用に、wp-config.phpに以下のコードを追記する(場所は一番下でOK)
    define( ‘DBI_AWS_ACCESS_KEY_ID’, ‘ アクセスキー’ );
    define( ‘DBI_AWS_SECRET_ACCESS_KEY’, ‘シークレットアクセスキー’ );
  3. WP Offload S3 Liteの設定画面で、バケット・cdn.example.comを選択
  4. WP Offload S3 Liteの設定画面「CloudFront or Custom Domain」で、cdn.example.comを入力する

これで設定は完了です。

以上の設定ができれば、WordPressで画像をなどをアップすると、Amazon S3にファイルがアップされて、メディアのURLは、自動的にcdn.expample.com//wp-content/uploads/xxx.jpgなどになります。

ちなみに、このプラグインがやっていることは、

  1. 一度、/wp-content/uploads/にファイルをアップロード
  2. そのファイルをAmazon S3にコピー
  3. ファイルのパスをAmazon S3のURL or カスタムドメインのURLに書き換え

という流れで、デフォルトの設定では、アップロードをするとサーバー側にもファイルが残るようになっています。

もし、サーバー側のデータを削除したいのであれば、設定画面の「AWS -> S3 and Cloud Setting」の中の、「Advanced Options -> Remove Files From Server」をオンにしてください。