Microsoft Azure Web ロールの IIS リセット
このポストは、4 月 30 日に投稿された IIS Reset on Windows Azure Web Role の翻訳です。
Web デベロッパーの方なら、手軽で簡単に使用できる iisreset コマンドで、正しく動作していない IIS ホストをリセットした経験があるのではないでしょうか。従来の Windows Server の VM ではこの方法でたいていうまく行きますが、Microsoft Azure でアプリケーションを実行している場合は、iisreset は実行しないでください。
この記事をお読みの方の中には、この記事だけでなく、他の記事にもすべて目を通しているという方も多くいらっしゃるはずです。当ブログには Microsoft Azure でのアプリケーション開発に役立つ記事ばかりが掲載されています。いつも当ブログをご愛読いただきありがとうございます。
一方で、当ブログをいつもお読みいただいているわけではない方もいらっしゃると思います。Microsoft Azure VM で IIS を手動でリセットしようして Web サイトにアクセスできなくなってしまい、解決方法を探していてこの記事にたどり着いたという方も、これは簡単に修正できる問題ですので、心配なさらないでぜひこの記事をお読みください。また、今後は Microsoft Azure Web ロールで IIS Reset を実行しないようご注意ください。
なぜ Azure では IIS Reset を実行してはいけないのか
Azure で IIS リセットを実行すると、ユーザーによる Web サイトへのアクセスを可能にするサービスである Windows World Wide Web Publishing Service (W3SVC) が停止してしまいます。
従来の Windows Server では、W3SVC サービスのスタートアップの種類は「自動」に設定されているため、W3SVC サービスが自動的に再起動し、問題なく機能します。
一方 Microsoft Azure では、Web ロール内で実行される Windows Azure Agent がロール開始前に W3SVC を構成できるよう、W3SVC が「要求による開始」に設定されています。従来の Windows Server の IIS とは異なり、Azure の IIS ロールは常に実行状態ではなく、Azure プラットフォームによってライフサイクルが制御されます。
IIS リセットの代替策とは
Microsoft Azure にホストされている Web アプリケーションで問題が発生していて、その原因が IIS ホストに関連していると思われる場合、次の対応を行うことをお勧めします。
1.問題を一時的に解消するのではなく、根本原因を突き止めるようにしてください。https://blogs.msdn.com/b/kwill/archive/2013/09/19/troubleshooting-scenario-5-internal-server-error-500-in-webrole.aspx (英語) を参照するか、または Visual Studio を使用してリモート デバッグを実行します (https://msdn.microsoft.com/ja-jp/library/ff683670.aspx)。問題の根本原因がわからない場合は、Microsoft Azure サポートに問い合わせるか、フォーラムに投稿してみましょう。マイクロソフトのサポート チームが問題の特定をお手伝いします。
2.Azure のロード バランサーが正常なインスタンスにトラフィックを送信できるように、複数のロール インスタンスを用意してください。また、Azure はロールが正常だとみなしているが IIS が正しく動作していない場合に、ロード バランサーがトラフィックを正しく制御できるように、カスタムのロード バランサー プローブを実装することを検討してください。
3.とにかく Web サイトを急いで復旧し、根本的な問題解決は後回しにしたいという場合は、ロールを再起動するか、iisreset の代わりに Windows Azure 管理ポータルから再起動してください。
Web サイトの復旧手順
1.Microsoft Azure Web ロールまたは Worker ロール内で [Start] をクリックし、services.msc を実行します。
2.Services (Local) の一覧を下にスクロールして、「World Wide Web Publishing Service」を探します。
3.「World Wide Web Publishing Service」を右クリックして [Start] を選択します。これで、再び Web サイトにアクセスできるようになります。
それでもまだ Web サイトにアクセスできない場合は、Azure 管理ポータルで、クラウド サービスの [INSTANCES] タブで Web ロールの [Reboot] をクリックして VM を再起動します (ロール インスタンスが複数ある場合は、「iisreset」を実行したインスタンスのみ再起動します)。
この記事が少しでもお役に立てれば幸いです。