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

ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Cloud Services のデプロイが完了しない原因を特定する方法

久しぶりに Azure Cloud Services のデプロイでハマってしまったので共有しておきます。

Web Role や Worker Role のプロジェクトをデプロイした際、パッケージに問題があり、ビジー → 再開中 が繰り返されてデプロイが完了しないときがあります。ポータル上では、何かしらのエラーが発生してロールが起動しないことは分かりますが、詳しい原因までは分かりません。

portal

DebugView for Windows というツールでログを取得すると、エラーの詳細が分かることがあります。

使い方

  1. こちらのサイトから DebugView for Windows をダウンロードします。
  2. デプロイが完了しないロールのインスタンスにリモートデスクトップ接続して、先ほどダウンロードしたファイルをコピーします。
  3. ロールのインスタンス上で、DbgView.exe を管理者権限で起動します。debugview
  4. Capture メニューで、Capture Win32 と Capture Global Win32 にチェックを入れます。debugview4
  5. Options メニューで Clock Time にチェックを入れます。debugview5
  6. ビジー → 再開中 の繰り返しが何度か発生するまで、ログを取得します。
  7. File メニューで、Save As からログをファイルに保存します。

ログの解析

例えば、次のようなログ出力されている場合、System.Web.HTTP.dll がパッケージに含まれない可能性があります。

#RD000D3A50148A.LOG
00000235    6:22:00 AM  [3128] System.TypeLoadException: Unable to load the role entry point due to the following exceptions:
00000236    6:22:00 AM  [3128] -- System.IO.FileNotFoundException: Could not load file or assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
00000237    6:22:00 AM  [3128] File name: 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

このアセンブリを参照設定に追加して、ローカルにコピーするプロパティを True に設定すれば解決です。

また、次のようなログ出力されている場合、Microsoft.WindowsAzure.Storage.dll の古いバージョン(2.1.0.4)を意図せず参照している可能性があります。

#RD000D3A50148A.LOG
00000128    8:15:45 AM  [3632] System.IO.FileLoadException: Could not load file or assembly 'Microsoft.WindowsAzure.Storage, Version=2.1.0.4, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
00000129    8:15:45 AM  [3632] File name: 'Microsoft.WindowsAzure.Storage, Version=2.1.0.4, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

Web.config にリダイレクトの記載を追加すれば解決です。

#Web.config
<dependentAssembly>
        <assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0"/>
</dependentAssembly>

まとめ

ビジー → 再開中 が繰り返されてデプロイが完了しない原因は、Web Role や Worker Role のプロジェクトが参照しているアセンブリがパッケージに含まれていなかったり、スタートアップタスク内でエラーが発生していることが考えられます。

ポータル上では詳しい原因までは分かりませんので、DebugView for Windows でログを取得して原因を特定するようにしましょう。