どうもなまこです。久しぶりにAWSネタです。
当ブログはAWSのサービスを使ってブログを運営しています。AWSにユーザー登録してからは1年間無料で利用できるサービスがあるのでとても低コストでブログを運営できています。
今回はAWSのサービスの中でも2、3番目に有名で、利用が多いのではないかと考えるS3のサービスについて紹介したいと思います。
この記事ではAWSのサービスの一つであるS3のサービスについて説明し、WordPressで画像をS3に保存するプラグインを紹介しています。補足、乖離している点があればご指摘いただけると助かります。

S3とは?
S3とはAWSが提供するストレージサービスです。簡単に言うとHDDやSSDのような外部記録のようなものです。クラウドサービスなのでクラウドストレージの概念に非常に似ていますが、S3はログ記録やバージョニング、アクセス制限などの機能があります。
S3は非常に99.999999999%の耐久性で1GBあたり$0.025/月と非常に安価です。また、従量課金性であるため、お金を払えば無制限にデータを保存することができます。特に画像や動画、多大なログなどを保存する場所に便利なサービスです。
なぜS3を使う?
なぜS3を使うといいのかを解説していきます。以下の項目に分けてみました。
Webサーバーのストレージの容量を節約する
Webサーバーに画像をアップロード、保存しても良いのですが、画像はファイルのサイズが大きいためWebサーバーのストレージを圧迫する可能性があります。
特に自分の場合、AWSの無料枠を使用しており、EBSと呼ばれるEC2のストレージが30GBのため、画像を投稿しているとすぐにいっぱいになってしまう可能性があります。
HTMLへとアクセスと負荷分散させる
Webサーバーに画像を保存するとHTMLへのアクセスと画像へのアクセスが同時になるためWebサーバに負担がかかります。画像をS3に保存することで負荷を分散させることができます。
スケールアウトに対応できる
スケールアウトとはサーバーの台数を増やすことです。Webサーバーに画像を保存するとスケールアウトした際に増加するサーバーに同期する必要があります。画像の保管場所を分けることでWebサーバーの増設などに対応することができます。
画像配信を高速化できる
画像をS3に保存することでコンテンツ配信サービスを利用することができます。コンテンツ配信にはCDNという技術が用いられます。CDNについては以下のサイトで詳しく説明されています。
CDNの技術を利用することで画像配信を高速化することができます。AWSではCloudFrontと呼ばれるコンテンツ配信サービスになります。CloudFrontについては次回の記事で詳しく書いていきたいと思います。
投稿した画像をS3に保存する
ここからは実際にバケットを作成してWordPressに投稿した画像がS3に保存される仕組みを記していきます。
S3のバケットを作成する
AWSのS3の画面からバケットを作成をクリックし、バケットを作成していきます。バケット名を決めていきます。バケット名はグローバルで1つである必要があるため、特定できてかつ固有の名前になるようにしてください。リージョンは利用しているサービスに合わせた方がレスポンスが良いです。

その他アクセス権限やバージョニングなどを設定していきます。アクセス制限はWordPressから画像を保存できるように”パブリックアクセスをすべて ブロック”をオフにしておくのが良いです。
バケットを作成してアクセスに”オブジェクトは公開することができます”と表示されていれば問題ありません。
S3にアクセスできるIAMユーザーを作成する
S3はアクセス制限があるため、S3にアクセスできるユーザーを登録する必要があります。AWSのIAMのダッシュボードからユーザーを選択します。アクセスの種類でプログラムによるアクセスにチェックを入れておきます。

次のステップをクリックしたら既存のポリシーを直接アタッチにクリックしてAmazonS3FullAccessを検索し、チェックを入れて次のステップをクリックします。必要に応じてタグを追加します。ユーザーを追加していきます。

ユーザーのアクセスキーIDとシークレットアクセスキーの情報のCSVファイルをダウンロードできるようになります。後々使うので忘れないように控えておきます。
WordPressに必要なプラグインをインストールする
画像をS3に保存するためのWordPressの設定を行っていきます。
WP Offload Media Lite というプラグインをインストールします。プラグインをインストールできたら有効化を忘れずに行いましょう。
EC2に必要なライブラリをインストールする
プラグインを有効化するために、WebサーバーであるEC2に必要なライブラリをインストールしていきます。EC2にSSH接続し、php-xml
をインストールします。
$ sudo yum install -y php-xml
ライブラリをインストールしたらライブラリを有効にするためにWebサーバーを忘れずに再起動しましょう。
Offload Media Liteの設定をする
WordPressの設定->Offload Medeia Liteを開き、STORAGE PROVIDERを設定します。Define access keys in wp-config.phpを選択します。
wp-config.phpにアクセスキーを記入します。’access-key-id’と’secret-access-key’にはIAMユーザーで設定したものを入力します。IAMユーザー作成の際にダウンロードしたCSVファイルに書いてあるアクセスキーとシークレットアクセスキーを入力します。
define( 'AS3CF_SETTINGS', serialize( array(
'provider' => 'aws',
'access-key-id' => '******************',
'secret-access-key' => '*****************',
) ) );
Bucketの部分でS3で作成したバケットを選択します。
ADVANCED OPTIONSの部分でRemove Files From ServerがOFFになっているのでONにします。こうすることによってサーバーに画像を保存せず、S3だけに画像を保存することができます。Save Changesで設定を保存します。
WordPressで画像を投稿してみる
今まで通りメディアから画像を投稿してみます。画像のURLがS3のURLになっていたら成功です!!!
まとめ
- S3を利用することでWebサーバーの負担と容量を軽減して画像を投稿可能になる
- S3でバケット作成し、IAMでS3にアクセスできるユーザーを作成する
- プラグインであるWP Offload Media Liteをインストールし、wp-config.phpで、アクセスIDとシークレットアクセスキーを記入する
次回はCloudFrontを使って画像を高速配信する方法を紹介していきます。
