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

Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

結局 SDK1.3のFull IISって何だ!?

Azure

こんばんは、statemachineです。VMロールと、Connnectが来る気配がありませんw。どうやら、まとめて処理されているそうなので、がまんしようと思います。

SDK1.3 新機能の一つに、Full IISがあります。ぶっちゃけて言えば、従来の制限がきつかったWebRole(のIIS)が、Windows Serverと同等なIISを実装したということであって、それってどういうこと? 的な感じで腑に落ちない部分が多々ありました。また、どうやら今まで動作していたアプリがSDK1.3ベースでは動かなくなったなどのTweetなどもあり、余計に??になってきたところ、そんな疑問に答えるBlogが以下に掲載されました。


New Full IIS Capabilities: Differences from Hosted Web Core - Windows Azure - Site Home - MSDN Blogs

これをもとに、ゆるく纏めたいと思います。IIS方面は全くの素人ですので、内容の正確性は担保できませんw、あしからず。

HWCって何だ?

Hosted Web Core/Hostable Web Coreと呼ばれる、IIS7以降のWebコンポーネント。これを独自のプロセスに組み込んで利用することができる。以下のURLが多少参考になるかもしれない。また、インストールマニアックスでお世話になったAzure Companionなどは、WorkerRoleにHWCを組込んでWebサーバの機能を提供している。

SDK1.3以前のWebRole

SDK1.3以前のWebRoleは、WaWebHost.exeがホストプロセスとなり、前述したHWCを組み込んで動作していた。たぶんこんな図。

  • RoleEntryPointクラス(OnStart/Run/Stopがあるクラス)と、Webアプリは同一プロセス、同一権限で動作。
  • HWCベースだから1つのWebサイトしかホストできなかった(?)

WebRoleは、IISと言いつつ、IISじゃなかったって言う方が正しい認識かもしれません。

SDK1.3以降のWebRole

通常のWindows Serverと同等の割と普通なIISになったと思われる。何らかの制限があるのかちょっとよく分からない。したがって、SDK1.3の新機能といわれている

  • 複数サイト
  • 仮想フォルダー
  • 仮想アプリケーション

などなどの機能は、新規のでも何でもなくてようやく通常のIISと同じ土俵に立てただけだと。

WaIISHost.exeがホストプロセスとなり、RoleEntoryPointクラス実行する。Webアプリは、通常のIISと同じくw3wp.exeというワーカープロセスで動作。w3wp側からもRoleEntryPointクラスが参照できることから、WebRole1.dllは読み込まれていると思われる。

で、どうなるんだ?

結局のところ、同一プロセスで動作していたやつが、分離されたに過ぎない。これによって問題になるのは、権限とアプリケーションドメイン。
したがって、New Full IIS Capabilities: Differences from Hosted Web Core - Windows Azure - Site Home - MSDN Blogsでも言及されているように、

  • スタティック変数を共有するシナリオは失敗。CloudStorageAccount.SetConfigurationSettingPublisherをRoleEntryPoint#OnStartで構成し、Webアプリ側でFromConfigurationSettingすると失敗する。Application_Start に持って行けば、これらは回避できる。
  • コンフィグファイルが読めない。

などの問題が発生する。

Elevated Privileges(Adminモードとの関係)

今回のAdminモードは、Full IISとは直接は関係ない。HWC版にAdminモードがあっても、結局のところIISのカスタマイズは限定的(というか不可?)。Full IISを独自にカスタマイズするのに、Adminモードが利用できるという位置づけだろう。

まとめ

  • SDK 1.3以前のWebRoleは、HWCベースであった。IISコンポーネントには違いないが、積極的にHWCですと言ってなかった気もする。こちらを限定版IISと呼んだ方がいいかもしれない。
  • SDK 1.3以降のWebRoleは、割と普通なIISになっって、同じ土俵に立てた。
  • こんな大きな変更があるにかかわらず、事前広報しないのはちょっとアレですね。

というわけで以上。