サイトアイコン Gatespace's Blog

AWS S3にWordPressのメディアを自動アップロードする「絡新婦」を試す

この記事をシェアする

@wokamoto さんの新作プラグイン「絡新婦」。WordPress のメディアライブラリにアップロードされたファイルを自動的に AWS S3 にアップロードし、リンクのURLも変更してくれるプラグインです。
単に画像ファイルを別サーバーに置くなら Flickr や Picasa にアップロードし WordPress 側に挿入すれば事足りるのでしょうが、以前から EC2 で WordPress を動かしつつ画像類はS3に置いて連動させる(サーバーを分散する)方法に興味があったので試してみました。

プラグイン Nephila clavata (絡新婦) について

このプラグインは WordPress のメディアライブラリにアップロードされたファイルを WordPress のあるサーバーと同時に Amazon S3 にも自動的にアップロードします。
表示する際は the_contentwp_get_attachment_url にフックし、本文や WordPress のimgタグのsrc属性をユーザー側で置き換えることなく、S3のファイルを見に行くようにプラグイン側で変更してくれます(データベースの内容を直接書き換えている訳ではないので、プラグイン無効化後は、通常通り WordPress のあるサーバーから配信されます)。
また、過去に登録したメディアについても、プラグイン有効化後、そのメディアが初めて表示されてタイミングでS3にファイルがアップロードされるので、余計な手間がかかりません。

詳しくは @wokamoto さんのブログをご覧ください。
S3 にメディアを自動アップロードするプラグイン「絡新婦」 | dogmap.jp.

S3バケットの用意

まず、S3のバケットを作っておきます。
作り方は、「AWS S3 のバケットに独自ドメインを割り当てて、静的ファイルをホスティング」を参考にしてください。なお、Endpoint が分かれば大丈夫なので、独自ドメインを割り当てる必要はありません。
またアクセスキーIDとシークレットアクセスキも控えておきましょう。

プラグインのインストール

2013年3月6日の時点でまだ公式ディレクトリにアップされていませんのでGithubからプラグインファイルをダウンロードし、インストールします。
※2013年3月7日公式ディレクトリで公開されました。

公式ディレクトリからダウンロードするかダッシュボードからプラグイン名で検索してインストールします。

WordPress › Nephila clavata « WordPress Plugins.

プラグインを有効化後、ダッシュボードの「設定」に「Nephila clavata(絡新婦)」というサブメニューが追加されますので、そこで設定を行います。

AWS アクセスキーID : アクセスキーID
AWS シークレットアクセスキー: シークレットアクセスキー
AWS リージョン : S3バケットのリージョンTokyoならAP_NORTHEAST_1
バケットのEndpointでも確認できます。(東京なら {バケット名}.s3-website-ap-northeast-1.amazonaws.com)
2013年3月6日追記:プラグインの日本語化と同時に分かりやすいリージョン名のプルダウンに変わりました。

いったん設定を保存した後、入力された値が正しければバケット名などを設定する覧が表示されます。

S3 バケット : プルダウンからメディアファイルをアップロードしたいバケットを選択
S3 URLS3バケットの Endpoint または、バケットに設定した独自ドメインのURL。必ず http:// から入力すること。

設定は以上です(設定はプラグインのアンインストール時に削除されるようです)。

メディアアップロード時の仕組み

新規にメディアファイルをアップロードした時は、今まで通りメディアファイルのディレクトリ(wp-content/uploads)にアップしつつ、先ほど設定したS3のバケットへメディアファイルが転送されます
既にアップロード済みのファイルの場合は、プラグイン有効化後に初めて投稿が表示された時にS3にメディアファイルがアップロードされます。これはWordPressにログインしていなくても行われます。

投稿の本文の画像のsrc属性などはS3ではなく今まで通りWordPressをインストールしたサーバーのメディアファイルになっているので、特に変更の必要はありません。

表示する時の仕組み

投稿本文のメディアファイルやアイキャッチ画像などが表示される時、プラグインによってメディアファイルのURLがS3のファイルへと置換されます。
先にも書きましたが、WordPressのあるサーバーにも同時にアップロードされていること、データベースに保存されている投稿の情報を書き換えていないことから、プラグインを無効化した場合でも元のURLを見に行くのでファイルが見つからないということはありません。

このプラグインの使いどころ

最初にも書きましたが画像などのファイルを別サーバーに置きたい場合、個人ユースであれば Flickr などのサービスを使えば事足りるでしょう。
しかし、企業ユースや場合によってはそういった外部サービスを使えない、でも大量に画像をアップロード・保管したい場合に良いのではないでしょうか?
(例えばギャラリーサイトなどで大量の写真をアップロードしつつ、表示速度やコストパフォーマンスを意識したい場合)

2013年3月6日 時点での注意点

まだスタートしたばかりなので多少バグがあるかもしれません。
そのときは作者の @wokamoto さんのブログにフィードバックしましょう。

今後の実装予定

実はプラグインの設定よりもS3にバケットを作って一般公開するのに時間がかかったんです。
そんな事をつぶやいたら

という事で実装されればかなり容易に始められるようです。

2013年3月6日追記:プラグインが日本語に対応。
2013年3月7日追記:バージョン0.1.1:アクセスキーIDやシークレットアクセスキーが空欄の時に保存してしまうと設定欄が空白になるバグの解消。
公式ディレクトリで公開されました。

この記事をシェアする