WordPressの画像をAmazon S3にアップロードする【AWS/WordPress】

Linux

WordPressにアップする画像の保存先を、WebサーバーからAmazon S3に変更したのでメモ。Amazon S3とはAWSのクラウドストレージサービスです。
容量を圧迫しがちな画像の保存先をS3に変更することで、Webサーバーの容量を気にせずサイトを運営できます。

S3にバケットを作成する

バケットとはAmazon S3に保存されるあらゆるデータを入れられる入れ物です。
AWSコンソールの「AmazonS3>バケットの作成」から作成できます。

バケット名に好きな名前を入力します。尚、他の誰かが使用している名前は設定できません。

今回は、aws-wp-img-serverというバケットを作成しました

作成したバケットへのアクセス権ですが、今回WordPressの画像を配信するのが目的なので、全てのアクセスを許可します。具体的には、パブリックアセスを全てブロックのチェックマークを外して、オフの状態にします。

S3の権限を持ったIAMユーザーを作成

S3を操作するには、権限を持ったユーザーが必要です。
AWSコンソールの「IAM>ユーザー」画面に遷移して、「ユーザーを追加」ボタンをクリックします。

ユーザー名に好きな名前を入力して、「プログラムによるアクセス」にチェックを入れます。

ユーザーのアクセス許可の設定では、「既存のポリシーを直接アタッチ」を選択して、フィルターのテキストボックスに「s3」と入力されると表示されるAmazonS3FullAccessを選択します。名前の通り、S3への全てのアクセスが可能となります。

全ての設定が完了したら、ユーザーの認証情報をCSVファイルで取得できます。
必要なファイルなので、必ずダウンロードしておきます。

WordPressにプラグインをインストールする

次に、WordPressの管理画面にログインして必要なプラグインをインストールします。
プラグイン追加の画面で「Wp Offload Media Lite for Amazon S3」を検索してインストールします。インストールしたら有効化しておきます。

プラグインを有効化したら管理画面の上部にこのような警告文が。

The official Amazon Web Services SDK requires PHP 5.5+ with SimpleXML and XMLWriter modules, and cURL 7.16.2+ compiled with OpenSSL and zlib. Your server currently has no SimpleXML PHP module and no XMLWriter PHP module.

You can deactivate the WP Offload Media Lite plugin to get rid of this notice.

phpの拡張モジュールであるSimpleXMLとXMLWriterがないと書いてあります。これらはPHPでXMLを扱う為のモジュールのようです。早速Webサーバにインストールします。
ターミナルでWebサーバーに接続して、次のコマンドを実行します。

$ sudo yum install -y php-xml

余談ですが、WordPress管理メニューの「ツール>サイトヘルス」という項目でGDという画像変換モジュールもないと言われたのでこれもインストールしておきます。

$ sudo yum install -y php-gd

インストールが完了したらapacheを再起動します。

$ sudo systemctl restart httpd.service

もう一度WordPressの管理画面を見ると、警告文が消えていると思います。

プラグインの設定をする

WordPress管理画面の「設定>Offload Media Liteを開くとこんな画面が出てきます。

どうやらwp-config.phpにコードを追加しろと書いてあるようです。
wp-config.phpはWordPressの設定ファイルで、WordPressが設置してあるWebサーバーにあります。私の場合は次のディレクトリにwp-config.phpがありました。

【ディレクトリ】
/var/www/html/wp-config.php

wp-config.php

上記の位置にコードを追加します。
access-key-idとsecret-access-keyは先ほどIAMユーザーを作成した時にダウンロードしたcsvファイルに記載されています。

wp-config.phpを保存して、先ほどのWordPress管理画面をリロードするとバケットを選択する画面になります。

「Browse existing bucket」をクリックすると、先ほどS3で作成したバケットが表示されるので、それを選択します。

最後に、設定画面下にある「ADVANCED OPTIONS」のRemove Files From ServerをONにすれば完了です。これは、Webサーバーに画像を残さないようにするための設定です。

実際にWordPressに画像をアップしてS3のバケットを確認すると、アップした画像が保存されていることが確認できました!

まとめ

画像の保存先をWebサーバーからAamazon S3に変更できました。

しかし、ここで問題が。。画像のURLが「s3-ap-northeast-1.amazonaws〜」のようにS3になっています。ドメインでブログを運営している場合が多いと思いますが、ここは同じドメインで管理したいところです。

URLの変更については機会があったらまとめたいと思います。

コメント