先日、digitalcube さん経由で Microsoft さんに誘われて Windows Azure Boot Camp に行ってきました。
その時、主要なプラグインの動作テストやコア機能のテストなんかをやったんで、その情報をシェア。
WordPress を Windows Azure で動作させたい場合は、以下の記事なんかを参考にしてください。
- WordPress日本語版 on Windows Azure & SQL Azure | Windows Maniax
- Windows Azure に WordPress をインストールする : dogmap.jp
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() が動かない
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 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 コアソースの管理画面からのアップデート
最新バージョンが取れない。
多分、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
マルチサイトで使用するには、ちょい問題が多いですが、シングルサイト版としては、現状でも大きな問題は無いと思いますし、これらの問題点も一つずつ潰していけると思います。
とりあえず人柱になって、開発してみてはどうでしょうか?
© 2011 Microsoft Corp. All Rights Reserved.