WordPressのメディアファイルをAmazon S3に置いて高速化する

Amazon S3はストレージサービスですが、静的Webサイトのホスティングも可能です。なので、WordPressのメディアファイル(画像ファイル)をS3に置いて、メディアファイルをS3から配信するといったことも可能です。

WordPressのメディアファイルのS3への配置は、Webサーバーの負荷低減とサイトの高速化の両方に寄与します。また、ロードバランサーを使ってWebサーバーを複数台構成にする場合は、メディアファイルをどこか一箇所に集約しなければならないので、必ずこうした方法を取る必要があります。

Amazon S3をWordPressのメディアサーバーとして利用する具体的な手順は以下のようになります。

まず、Amazon S3にバケットを作成します。

Amazon S3バケットの作成
Amazon S3バケットの作成

バケット名は、sslを使うのであれば区切り文字にドットは使わず下記のようなハイフンで繋げた名前にします。

www-example-com

次にリージョンを選択します。日本向けのサイトであれば、「アジアパシフィック(東京)」を選択します。

「既存のバケットから設定をコピー」は何も選択せず、「次へ」をクリックします。

Amazon S3 バケットの作成 プロパティ
Amazon S3 バケットの作成 プロパティ

「プロパティの設定」は以下のデフォルト値のままで「次へ」をクリックします。

Versioning:無効
Logging:無効
Tags:0Tags

Amazon S3 バケット アクセス許可
Amazon S3 バケット アクセス許可

「アクセス許可の設定」では、「全員」に「読み込み」を許可します。必要に応じて、「認証済みのAWSユーザー」に必要なアクセス許可を付与します。

Amazon S3 バケットの作成 確認
Amazon S3 バケットの作成 確認

確認画面で設定を確認し、問題なければ「バケットを作成」をクリックします。

バケットが作成できたら、アクセス権限のバケットポリシーで、静的Webサイトホスティング用のポリシーを設定します。

Amazon S3 バケットポリシー
Amazon S3 バケットポリシー

静的Webサイトホスティング用のポリシーは以下のようになります。www-example-comの部分は自身のサイトに合わせて変更してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::www-example-com/*"
        }
    ]
}

これで、Amazon S3側の設定は完了です。

WordPressのメディファイルのS3へのアップロードと、メディファイルのURLの書き換えには「Argiope amoena(黄金蜘蛛)」プラグインを使用します。

WordPressのプラグイン追加画面から、Argiope amoena(黄金蜘蛛)プラグインをインストールします。

Argiope amoena(黄金蜘蛛)プラグイン追加
Argiope amoena(黄金蜘蛛)プラグイン追加

Argiope amoena(黄金蜘蛛)プラグインをインストールしたら、有効化します。有効化するとWordPressの設定に「黄金蜘蛛」という項目が追加されます。

Argiope amoena(黄金蜘蛛)WordPress プラグイン 設定画面
Argiope amoena(黄金蜘蛛)WordPress プラグイン 設定画面

Argiope amoena(黄金蜘蛛)プラグインの設定画面で、自身の「AWSアクセスキー」、「AWSシークレットキー」を入力し、「AWSリージョン」を選択し、1回、「変更を保存」ボタンをクリックします(「ストレージクラス」は、何も選択しなくても問題ありません。)。

「AWSアクセスキー」、「AWSシークレットキー」の入力が間違っていなければ、「S3 バケット」、「S3 URL」の入力欄が表示されます。

Argiope amoena 黄金蜘蛛 WordPress プラグイン
Argiope amoena 黄金蜘蛛 WordPress プラグイン

「S3 バケット」は、最初に作成したWordPressのメディアファイルのアップロード用のバケットを選択します。

「S3 URL」の指定は、以下のようになります。

https://s3-ap-northeast-1.amazonaws.com/www-example.com

https://s3-リージョン名.amazon.com/バケット名

という形式です。

以上で完了です。後は、プラグインが自動的にS3にメディアファイルをアップロードし、メディアファイルのURLをS3のURLに書き換えてくれます。

なお、S3を使わなくなった場合には、プラグインを無効化すれば、通常通り、メディアフィルのURLはWordPressのuploadディレクトリを指すようになります。