Windows Azure で WordPress を動作させる

先日、digitalcube さん経由で Microsoft さんに誘われて Windows Azure Boot Camp に行ってきました。
その時、主要なプラグインの動作テストやコア機能のテストなんかをやったんで、その情報をシェア。

WordPress を Windows Azure で動作させたい場合は、以下の記事なんかを参考にしてください。

Windows Azure とはクラウド上でアプリケーションを動作させるプラットフォームです。
大まかにわけて、以下の3つのプロダクトから成り立ちます。

  • Windows Azure
    クラウド上に展開された Windows OS プラットフォーム。
    Amazon で言う EC2 に相当。
    インスタンスを増減させることで、簡単にスケールアウト可能。
    ただし、内容は揮発性のため、データ等は別プロダクトで管理する必要がある。
  • SQL Azure Database
    クラウド上で動作する SQL Server 互換の RDBMS。
    Amazon で言う EC2 Relational Databases AMI に相当。
  • Windows Azure Storage
    クラウド上のデータ保管プラットフォーム。
    アクセス API として REST と .NET が用意されている。
    Amazon で言う S3 に相当。

Windows Azure OS 上のデータは保障されないため、プログラム以外の変更が発生しうるデータについては SQL Azure や Azure Storage に保管することになります。
この辺が通常のサーバと違うところです。
しかし、これができるために OS 部分の Windows Azure については、フレキシブルにインスタンスを増減させて突然のアクセス集中等によるリソース不足に対応することができます。

通常 WordPress や、他のプロダクトではオープンソースの MySQL や Postgre SQL をデータベースとして利用することが多いのですが、これをクラウド上の SQL Azure に置き換えることが今回の Boot Camp のキモになってました。
WordPress の Azure SQL 対応については専用のプラグインがあるのですが、残念ながらまだ全ての機能を網羅したモノではありません。
これは MySQL 向けに発行された SQL 文を SQL Azure 用に変換してくれるプラグインなのですが、少なくとも以下の SQL 文が使用できませんでした。

  • SHOW TABLES
  • DESCRIB
  • IF TABLE EXISTS
  • FULLTEXT インデックスによる全文検索

これらへの対応が、今後の課題になると思います。

また、日本語環境での実績が少ないため、色々と問題が発生していました。

WordPress コア機能

パーマリンク構造

%post_name% を使っている場合、日本語URLが利用できない。
この辺、参考にすると解決できるかもしれませんが、未検証です。
IIS 7.5 環境で WordPress のパーマリンクに日本語が含まれると 404 エラーが発生する場合の回避方法 – WebMatrix の歩き方 by 武田正樹 – Site Home – MSDN Blogs

file_get_contents() が動かない

WordPress フォーラムウィジェットfile_get_contents() 関数で URL 指定してデータ取得しようとするとエラーになるようです。
詳しく検証してないんですが、今回構築した環境の問題かもしれません。
また WordPress では、通常 Web 上のデータを取得する際は、file_get_contents() 関数ではなく、独自に用意された wp_remote_get() 関数を使うはずなので、このダッシュボードウィジェットの作りが悪いのかもです。
# プラグイン・テーマのアップデート情報は、正常に取得できていた。

WordPress からのメール送信

Windows Azure では SMTP サーバを立てられないため、そのままでは動作しません。
WP Mail SMTP 等の、他の SMTP サーバを使用するプラグインを使用することで回避できます。

SQL 構文

冒頭にも書きましたが、以下の SQL 文が使用できませんでした。

  • SHOW TABLES
  • DESCRIB
  • IF TABLE EXISTS
  • FULLTEXT インデックスによる全文検索

これらは WordPress のコア機能ではほぼ使われない構文ですが、データベースのバックアップ系のプラグインとか、関連記事検索プラグインなんかでは使われてます。
また、独自テーブルを追加するプラグインなんかでも使ってますね。

メディアのアップロード

Windows Azure Storage for WordPressWindows Azure Storage for WordPress を使います。
画像登録できるが、WordPress のメディアライブラリに登録されませんでした。(アイキャッチとして使用できない。)
ただし、これは通常のメディアアップロードで行っても BLOB と同期取ってくれるので問題無いです。
Windows Azure のアイコンからファイルをアップロードせず、通常のメディアアップロードを使いましょう。
また、blob にあげた画像ファイルの Content-Type が application/octet-stream になってしまうという問題があります。
Azure Blob Download Problem

$ wget -d http://wokamototest1.blob.core.windows.net/wokamoto/2011/10/dfa0df135b36872ef8a60816c3b3956b-150x300.jpg
---response begin---
HTTP/1.1 200 OK
Keep-Alive: true
Content-Length: 9860
Content-Type: application/octet-stream
Last-Modified: Thu, 06 Oct 2011 09:54:00 GMT
ETag: 0x8CE522501B967F0
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 00531186-ab08-49d9-b002-875b6066d026
x-ms-version: 2009-09-19
x-ms-meta-tag: WordPressDefaultUploadSizesThumbnail
x-ms-lease-status: unlocked
x-ms-blob-type: BlockBlob
Date: Thu, 13 Oct 2011 09:52:49 GMT
Connection: keep-alive
---response end---

BLOB にアップロードする際に Content-Type を指示できる API はあるのでプラグインを修正すれば、問題は解決できるでしょう。
REST API でBlob 操作 Upload編 – Azureの小ネタ

WordPress コアソースの管理画面からのアップデート

WordPress のアップデート最新バージョンが取れない。
多分、file_get_contents() が動かないのと同じ問題な気がします。未検証。
WordPress 本体をアップデートする際はパッケージを作り直してデプロイしなおしたほうが良いので、管理画面からアップデートすることは無いと思います。
しかし、アップデートのお知らせが出続けるのは、あまり嬉しくないですね。
気になる人は Disable WordPress Core Update とか入れておくと良いでしょう。

WordPress コアソースのアップデート

新バージョンの WordPress でパッケージを生成しなおしてデプロイしなおせば問題ありませんでした。

WordPress 管理画面からのプラグイン・テーマのアップデート

問題ありませんでした。
また、Interop-Bridges/Windows-Azure-File-System-Durability-Plugin – GitHub を入れておくと wp-content 以下を Windows Azure Storage 上の BLOB と同期取ってくれるので、インスタンスを増やしたり落としたりしても安心です。

マルチサイト版

マルチサイトネットワーク管理での日本語の扱いマルチサイトに設定して、ネットワーク名を日本語で設定しようとしたんですが文字化けしてしまいました。
この辺は、SQL Azure WordPress on SQL Azure日本語対応 translations.php が、よしなにしてくれるはずなんですがダメだったようです。
「新ユーザー案内メール」や「最初の投稿」辺りも、日本語入力すると文字化けしてしまいます。
マルチサイト版のネットワーク管理のところで、正常に動作していないのかもしれません。
詳細は未検証です。

また、Azure マルチサイト用の Web.Config 記述が WordPress に提示されたものでは正常に動作しませんでした。
この辺も、詳細な調査が必要ですね。
試していませんが、この辺で解決するかもしれません。
AzurePHP – How to deploy WordPress Multisite to Windows Azure using the WordPress scaffold

主要プラグイン

Akismet

Akismet は、問題なく動作しました。

Contact Form 7

Contact Form 7
Windows Azure では SMTP サーバを立てられないため、単体では動作しません。
ただし、WP Mail SMTP 等の、他の SMTP サーバを使用するプラグインと併用することで、問題なく使用できます。

ケータイ、スマートフォン対応プラグイン

Ktai Style, WPtouch 共に問題なく動作しました。

関連記事抽出プラグイン

Yet Another Related Posts Plugin (YARPP)
DB サーバとして MySQL Server ではなく、Azure SQL を使うので FULLTEXT インデックスによる全文検索が使えないため、まともに動作しません。
他のプラグインについては、試していません。

XML Sitemap 生成プラグイン

Google XML Sitemaps しか試していませんが、動作しませんでした。他のプラグインなら、動作するかも。
詳細は、未検証です。

データベースバックアッププラグイン

WP-DBManager, WP-DB-Backup 共に動作しませんでした。
これは、DESCRIB や SHOW TABLES と言ったデータベースの構造を調査するための構文が SQL Azure で動作しないからです。
もちろん、僕の Total Backup も動作しませんでした。
代替プラグインを作成するのが手っ取り早いのかな。

また WordPress サイトのリアルタイムバックアップを行う Automattic 社のサービス VaultPress も、データベースのバックアップのみ、正常に動作しませんでした。

Jetpack by WordPress.com

Jetpack by WordPress.com
全ての機能が問題なく使用できました。

Simple Tags

Simple Tags
「あなたの WordPress のデータベースから応答がありません。」と表示されて、クイックタグが出てきませんでした。
WordPress の API 以外の方法でデータベースアクセスを実装しているのかも知れません。
詳細は未検証です。

まとめ

現時点では色々問題も有りますが、クラウド上で簡単にスケールアウトさせることができる Windows Azure は非常に魅力的です。
また、EC2, Google Apps に比べても Azure のパフォーマンスが優れているという報告も出ています。
Windows Azure beats Amazon EC2, Google App Engine in cloud speed test

マルチサイトで使用するには、ちょい問題が多いですが、シングルサイト版としては、現状でも大きな問題は無いと思いますし、これらの問題点も一つずつ潰していけると思います。
とりあえず人柱になって、開発してみてはどうでしょうか?

Windows Azure はわたしの、最高の友達
 

© 2011 Microsoft Corp. All Rights Reserved.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください