しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Web サイトの隠し機能っぽい設定をまとめてみた

Azure Web サイトで証明書を使う簡単な方法と Web サイトにも Intel CPU が混ざってきた件 - しばやん雑記 で紹介した WEBSITE_LOAD_USER_PROFILE という設定ですが、Azure Web サイトには似たような設定が他にも用意されているのでまとめてみます。

ちなみに公式な情報は GitHub Wiki に書いてあるので、この記事はそれの意訳版という感じで。

Configurable settings · projectkudu/kudu Wiki · GitHub

基本的に管理ポータルのアプリケーション設定から追加しないと有効になりません。

f:id:shiba-yan:20140809202523p:plain

殆どがキー名から理解出来そうですが、とりあえず見ていきましょう。

WEBSITE_NODE_DEFAULT_VERSION

Azure Web サイトで使われる Node.js のバージョンを指定するための設定です。

昔は新しく Web サイトを作成した時に 0.10.21 がデフォルトで指定されていましたが、最近作った Web サイトでは 0.10.29 がデフォルトになっているようです。

f:id:shiba-yan:20140809202846p:plain

これは US Central に最近作成した Web サイトのアプリケーション設定です。やっと最新の Node.js を最初から使えるようになりました。

WEBSITE_PRIVATE_EXTENSIONS

既に Windows Azure Web サイトの Site Extension として phpMyAdmin を動かしてみた - しばやん雑記 でも扱っていますが、独自の Site Extensions を SCM 側で動かすための設定です。

f:id:shiba-yan:20140809203316p:plain

アプリケーション設定の追加後、Web サイトを再起動することで XDT が applicationHost.config に適用されて Site Extensions として動作するようになります。

WEBSITE_WEBDEPLOY_USE_SCM

暫く前に Azure Web サイトへのデプロイ方法が変更され、MSDeploy が Site Extensions として動作するようになりました。

f:id:shiba-yan:20140809205244p:plain

以前は MSDeploy 専用のエントリポイントを持っていましたが、アーキテクチャの最適化が行われているのでしょう。それは喜ばしいことなのですが、MS Deploy が Site Extensions として動作するようになったことで、サイトを停止中にデプロイを行うことは出来なくなりました。

特に問題になるのが New Relic の Azure Web サイトプラグインで、サイト稼働中にファイルをロックするため、プラグインアップデート後のデプロイが必ず失敗するようになります。

Workaround: You can stop your website to release the file and allow the update to take place. Once the deploy is complete you can restart the instance. This will only happen if you are attempting to deploy a new version (over an existing one) of the .NET agent to an Azure Web Site.

Azure Web Sites | New Relic Documentation

New Relic 側でも認識している問題ですが、ここに書いてある Workaround が MSDeploy が Web サイト上で動くようになったため使えなくなっています。

簡単な解決法は以前のデプロイ方法に戻してしまうことです。

f:id:shiba-yan:20140809203517p:plain

これで以前のように専用のエントリポイントを使う発行プロファイルが生成されるようになります。

WEBSITE_LOAD_USER_PROFILE

これも Azure Web サイトで証明書を使う簡単な方法と Web サイトにも Intel CPU が混ざってきた件 - しばやん雑記 で既に扱っていますが、ユーザープロファイルを読み込むかどうかの設定です。

f:id:shiba-yan:20140809203606p:plain

ぶっちゃけ、ユーザープロファイルを読み込むことでどうなるのかをあまり知りませんが、証明書や Workflow を使ったアプリケーションを Web サイトで動かす時に必要になるようです。

Deployments fails when referencing System.Xaml

Workflow Foundation に関しては縄神様に任せたいです。

WEBSITE_DISABLE_SCM_SEPARATION

GitHub Wiki と名前からはユーザーサイトと SCM 側を別プロセスで動かしているのを無効化するという設定としか思えないですが、何もしなくても w3wp.exe は 1 つしか動いていないので、ちょっと意味が分からない設定です。

f:id:shiba-yan:20140809213852p:plain

一応、設定を追加してみましたが、特にアプリケーションプール周りもワーカープロセスに関しても変化が無かったです。もう少し調べてみたいと思います。

******_EXTENSION_VERSION

最近ホットな Visual Studio Online "Monaco" や Azure モバイルサービスは実際のところ Site Extensions として実装されています。しかしデフォルトで無効化されているので、有効にする設定が必要になります。

f:id:shiba-yan:20140809212408p:plain

Visual Studio Online "Monaco" の場合は管理ポータルから簡単に追加できますが、実際にはアプリケーション設定に MONACO_EXTENSION_VERSION = beta という設定を追加しているだけです。

例えば MOBILESERVICESDOTNET_EXTENSION_VERSION = beta という設定を追加すると、モバイルサービスの .NET Backend ホストの Site Extensions が有効になります

f:id:shiba-yan:20140809212329p:plain

この設定を使えば、まだ日本にデプロイされていないモバイルサービスを使えるようになります。*1

f:id:shiba-yan:20140809213039p:plain

実際に設定を追加して Web サイトにアクセスするとモバイルサービスのスタートページが表示されます。仕組み的には Web サイトもモバイルサービスも同じようなものです。

最後に、今回紹介した設定で Kudu 側が関係しているものに関しては、GitHub のソース内にキー一覧が定義されているので紹介しておきます。

kudu/SettingsKeys.cs at master · projectkudu/kudu · GitHub

SCM や Web Jobs に関する設定はまだまだ沢山あります。

*1:管理ポータルのサポートが無いので軽く遊ぶ程度