ヤマムギ

growing hard days.

*

Nephila ClavataでWordPressの画像をS3から配信する

   

当ブログサイトはAWS EC2とRDS上でWordPressを構築しているのですが、画像はEC2サーバから配信していました。
そのため、EC2をスケール出来ない、や、EC2のバックアップをまめにとらないといけない、など運用の手間が発生するので、
Nephila ClavataでWordPressの画像をS3から配信する事にしました。

Nephila Clavata

詳細は作者さんのサイトからご確認ください。

  • PHP5.3以上が必要
  • データベースの記事レコードの画像のパスを書き換えているわけではない(the_content, wp_get_attachment_urlにフックして プラグイン側で変更してくれる。)
  • 設定後アップロードした画像はサーバとS3の両方に同期される
  • 設定前にサーバにアップロードした画像も記事が表示されたタイミングでS3に同期される
  • プラグインを無効化するとサーバからの配信に戻る(パスを書き換えていないので)
  • WordPressサーバを冗長化したときにサーバAからアップロードした画像をサーバBで表示したときにサーバBのローカルにも同期される?(要検証)

WordPress管理画面のプラグイン新規追加から追加しておきます。

画像を保存するS3バケットの作成

Nephila Clavataが画像を同期するためのS3バケットを作成します。

マネージメントコンソールのS3メニューから新規でバケットを作成します。

バケット名は「img.blog.yourdomain.com」などにしました。
※ドメインは独自ドメインを使う必要もないと思うのでそれほど意識する必要はないと思います。

リージョンはEC2と同じ東京リージョンにしました。

Loggingは同じバケットのlogフォルダを指定しました。

作成後、[プロパティ]でStatic website hostingを有効にします。

[アクセス権限] – [バケットポリシー]でアクセス権限を設定します。
logフォルダにはアクセス出来ないように、wp-contentフォルダ以下を有効にします。
index.htmlはテスト用に有効にしています。

ここまで出来たらバケットにindex.htmlを適当に作ってアップロードして、エンドポイント(例 : http://img.blog.yourdomain.com.s3-website-ap-northeast-1.amazonaws.com)にブラウザからアクセスしてみて、index.htmlが表示されることを確認します。

アップロード専用ユーザの作成

念のため、アクセスキーIDとシークレットアクセスキーが漏れてもアクセス範囲をS3だけに抑えるため専用ユーザを作成します。

マネジメントコンソールからIAMを開いてユーザを新規作成します。

ポリシーはAmazonS3FullAccessをアタッチしました。

作成したユーザーのアクセスキーIDとシークレットアクセスキーを控えます。

Nephila Clavataの設定

プラグイン一覧から[有効化]して[設定]します。

AWSアクセスキーIDとAWSシークレットアクセスキーが正しくアクセス権限が適切に設定されていれば、[変更を保存]をクリックすると、
[S3 バケット]と[S3 URL]の項目が表示されるのでそれぞれ入力して[変更を保存]をクリックします。

S3にまだない画像を含むページに最初アクセスするとS3側へのファイル作成が動くのでページ表示にやや時間がかかりますが、同期が出来ているページの表示には時間はかかりませんでした。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - WordPress ,

ad

ad

  関連記事

WordPressでかんたんにフォームを使用できるWPForms Lite

このブログサイトではないのですが、WordPressでかんたんにフォームを作れる …

WordPressにログインを強制して記事ごとのアクセス制限もする

WordPressを限定された組織内で使いたいとした場合に下記を実現したいと思い …

WordPress投稿編集メニューでメディアライブラリに何も表示されなくなった

状態 WordPressで記事を編集して画像を挿入しようとすると、メディアライブ …

Amzon Linux のApacheでRedmineとWordPressをバーチャルホストで共存する

EC2とRDSを節約しようと思いまして、Redmineを動かしてるとこに検証用W …

OGPの設定をAll in One SEOからfunctions.phpで生成する方法に変えました

WordPressをアップデートしたら、All in One SEOの管理画面が …

WordPressサイトを常時SSL化したら「jQuery is not defined」になってプラグインが動作しなくなった

WordPressをAmazon CloudFrontで配信してついでにACM( …

WordPressのPHPを7から8にしたらプラグインのエラー “Unparenthesized `a ? b : c ? d : e` is not supported”

WordPressのPHPを7から8にしたら次のエラーが発生しました。 PHP …

WordPressを4.7.2にアップグレード後、ログインしないと表示出来なくなって対応

このブログをWordPress 4.7.2にあげた後、ログインしていないと規則性 …

Translate WordPress with GTranslateプラグインをインストールして当ブログに翻訳機能を追加する

翻訳プラグインを追加した理由 Google Analyticsを眺めていると、ほ …

WordPress Popular Postsのページビューカウントが止まってたからの復旧

WordPress Popular Postsのページビューカウントが止まってた …