これは Azure Advent Calendar 2015 の 3 日目記事です。おーみさんが日付変わると同時に書いていたので、今年のアドベントカレンダーは何か奇跡が起こるのではないかと思っています。
私はいつも通り誰も知らないような Web Apps の機能を紹介したいと思います。
Admin Site
まだ実験的な実装のようですが、Admin Site という機能が ARM から使えるようになっています。1 つの Web App を Admin site にすると特殊な Site Extension がインストールできるようになります。
Admin site · projectkudu/kudu Wiki · GitHub
その特殊な Site Extension はシステムドライブの Program Files (x86) 以下に保存されるので、同一 App Service Plan 内のアプリケーションから自由に参照可能なファイルとなります。
XDT を入れておけば、Web Apps 全てで同じ Site Extension を動かすことが出来ます。
Local Cache
これも実験的な機能っぽいですが、ファイルのローカルキャッシュが実装されています。Web Apps では複数インスタンスでファイルを共有するために、ファイルサーバーを SMB でマウントしていますが、速度は遅いので高速なローカルドライブにファイルをキャッシュする機能です。
WEBSITE_LOCAL_CACHE_OPTION をポータルから Always に設定すれば有効になります。
This feature copies the site bits to the faster local drive before running them.
WEBSITE_LOCAL_CACHE_OPTION=AlwaysConfigurable settings · projectkudu/kudu Wiki · GitHub
とても重要な注意点として、ファイルをローカルにキャッシュすることはコンシステンシーを犠牲にしてパフォーマンスを上げる手段だということです。アプリケーション自体がイミュータブルな設計になっている時のみ可能な機能なので、盲目的に有効化するものではありません。
ちなみに JRuby などファイルの読み込みが多いケースでは、有効にすると 20-30% ぐらい起動時間が短縮されました。キャッシュされたファイルは、ワーカープロセスが再起動するまでは保持されているようです。
Web Apps Sandbox
Web App は Kudu までは GitHub でコードが公開されていますが、それ以外の IIS モジュールなどに関してはコードが読めないため、細かい制約などは不明でした。しかし最近になって Wiki に Web Apps の Sandbox 実装についてまとめられました。
Azure Web App sandbox · projectkudu/kudu Wiki · GitHub
多くの人が通ったであろう PDF 生成周りについても、何故利用できないかがまとめられています。スレッドやプロセスの制限など、ディープに使う場合の情報もまとまっているのでとても便利です。
Kudu 上のアカウント名表示
何故か Punycode 化されたまま表示されていたアカウント名ですが、正しくデコードするコードを書いて Pull Request を投げたところマージされました。
コメントでやり取りしたところ、開発チームの方から何故デコードが必要なのか聞かれたので、積極的にマルチバイト周りの不具合を見つけたら報告していこうと誓いました。
おまけ : Local MySQL Feature
Kudu Wiki に一瞬だけ Local MySQL Feature というページが作成されていました。今は削除済みです。
ページは消えていますが Site Extension として phpMyAdmin はインストールされているので、ひょっとしたら何時かは ClearDB を使わなくてもローカルの MySQL で WordPress などのアプリケーションを実行できるようになるかもしれませんね。
来年も Web Apps のアップデートに注目していきたいです。そして何処かで ASE を使ってみせます。