読者です 読者をやめる 読者になる 読者になる

xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Azure Web Sitesの仮想ディレクトリにWeb Deployする方法

Azure Web Sitesには仮想アプリケーション/仮想ディレクトリという機能があります。wwwrootなどのルートディレクトリでなくても (その他のサブフォルダでも) 仮想的なルートディレクトリとして認識させ、アプリケーションを動作させることができます。設定は管理ポータルの [Web サイト] - [構成] から可能です。

VirtualAppAndDirectory

これを利用すれば、ひとつのサイトでいくつもアプリをホストすることができるようになるということなので、例えばひとつの共有サイトで課金を最小限に抑えつつ複数のドメインを割り当てる、といったことができるようになります。

Windows Azure Web サイトでサブドメインを活用してみた

ここで気になるのがWeb Deployの方法です。通常Visual Studioの [発行] からWeb Deployする場合、発行プロファイルをダウンロード/インポートして行います。Azure Web Sitesから取得できる発行プロファイルは一種類のみで、その設定はルートディレクトリへのアップロード用としての記述となっています。ルートディレクトリではなく、作成した仮想ディレクトリ配下への発行はどうするのか。

仮想ディレクトリへのWeb Deploy方法

仮想ディレクトリへの発行はサイト名を「SiteName/VirtualApp」のように変更します。設定はたったこれだけで、あとは [発行] ボタンを押せばホスティング完了です。とっても簡単ですね!実は自分ではやり方が分からず、Azure Web Sitesの開発者である帝国兵さん (@superriver) にコッソリ聞いてみました。即答して頂き、大変に感謝しております!

WebPublish

アプリケーションプール数とリサイクル

他にも2点疑問点がありました。

  • 仮想アプリケーションが複数ある場合、アプリケーションプールは共有か
  • 仮想アプリケーションをWeb Deployした場合、アプリケーションプールがリサイクル (再起動) するか

IISにはアプリケーションプールというワーカープロセスの分離機能があります。サービスを稼働させるプロセスを分離することで実行プロセスに障害が発生した場合でも他プロセスに影響を出さないようにする、というものです。Azure Web Sitesの中身はIISなので (勘でですが) サイト別に1つずつアプリケーションプールが用意されていると思っています。仮想アプリケーションはひとつのサイト上で仮想的に複数のアプリケーションがあるものと考えるものなので、ひとつのアプリケーションプール上で動いているのではないかと考えました。Web Deployするとアプリケーションプールのリサイクルが発生する (= アプリケーションが再起動する) と思っていたので、「仮想アプリケーションが複数ある場合どこかの仮想アプリケーションに対してWeb Deployをすると他のサイトも再起動することになるのでは?」と懸念しました。

これについてはASP.NET/IISのMVPでAzure Web Sites大好きッ子のしばやん (@shibayan) にMVP Community Camp 2014の懇親会のとき口頭で「どうだろー?」って聞いていたのですが、「帝国兵さんに聞いてみるしかないわー」と言われたのでコレも先の質問のついでに聞いてみました。Twitterのダイレクトメッセージで頂いた回答を引用すると以下の通りです。

確認とれました。やはりwebdeployしてもリサイクルされません。あとAppPoolも共有されてます。なのでどれか1つをリセットすると全部の仮想アプリがリセットされてしまいますが、publishするだけではリセットされません。

ということで、仮想アプリケーションへの発行作業自体ではアプリケーションプールの再起動が入らないので安心のようです。そしてやはりアプリケーションプールはひとつなのでリサイクルには十分気を付けましょう!