Azure クラウド サービス (クラシック) ロールがリサイクルされる一般的な問題

重要

現在、Cloud Services (クラシック) は新しいお客様に対して非推奨となっており、2024 年 8 月 31 日に、すべてのお客様に対して廃止される予定です。 新しいデプロイでは、新しい Azure Resource Manager ベースのデプロイ モデル、 Azure Cloud Services (延長サポート) を使用してください。

この記事では、デプロイメントに伴う問題の一般的な原因と問題解決に役立つトラブルシューティングのヒントを紹介します。 アプリケーションに存在する問題の兆候として、ロール インスタンスが起動に失敗したり、初期化、ビジー、停止という状態を繰り返したりすることが挙げられます。

この記事で Azure の問題に対処できない場合は、Microsoft Q&A と Stack Overflow の Azure 関連フォーラムを参照してください。 問題をこれらのフォーラムに投稿するか、または Twitter の @AzureSupport に投稿できます。 Azure サポート要求を送信することもできます。 サポート要求を送信するには、[Azure サポート] ページで [サポートを受ける] を選択します。

ランタイムの依存コンポーネントの不足

アプリケーション内のロールが .NET Framework または Azure マネージド ライブラリの一部ではないアセンブリに依存している場合は、そのアセンブリをアプリケーション パッケージに明示的に含める必要があります。 既定では、他の Microsoft フレームワークは Azure で使用できないことに注意してください。 そのようなフレームワークにロールが依存している場合、対象となるアセンブリをアプリケーション パッケージに追加する必要があります。

アプリケーションをビルドしてパッケージ化する前に、次の記述が当てはまることを確認します。

  • Visual Studio を使用している場合、Azure SDK または .NET Framework に含まれていない、プロジェクトの各参照アセンブリの [ローカル コピー] プロパティが [True] に設定されている。
  • web.config ファイルの compilation 要素が、未使用のアセンブリを参照していない。
  • すべての .cshtml ファイルの [ビルド アクション][コンテンツ] に設定されていること。 この設定によって当該ファイルがパッケージに正しく追加され、他の参照ファイルをパッケージに表示できるようになります。

アセンブリのターゲット プラットフォームの間違い

Azure は 64 ビット環境です。 そのため、32 ビット ターゲット用にコンパイルされた .NET アセンブリは Azure と互換性がありません。

初期化中または停止中ハンドルされない例外をロールがスローする

RoleEntryPoint クラスのメソッド (OnStartOnStopRun などのメソッド) によってスローされる例外はすべて、ハンドルされない例外です。 これらのメソッドのいずれかでハンドルされない例外が発生した場合、ロールはリサイクルされます。 ロールが何度もリサイクルされる場合、起動の途中でハンドルされない例外がスローされている可能性があります。

Run メソッドが終了している

Run メソッドは無限に実行するように設計されています。 Run メソッドをオーバーライドする場合は、無期限にスリープ状態となるようにコードを記述する必要があります。 Run メソッドから制御が戻った場合、ロールはリサイクルされます。

DiagnosticsConnectionString の設定に誤りがある

アプリケーションで Azure Diagnostics を使用している場合、サービス構成ファイルで DiagnosticsConnectionString 構成設定を指定する必要があります。 この設定で、Azure にある該当ストレージ アカウントへの HTTPS 接続を指定します。

アプリケーション パッケージを Azure にデプロイする前に DiagnosticsConnectionString 設定が正しいことを保証するには、次の記述が当てはまることを確認します。

  • Azure 内の有効なストレージ アカウントが DiagnosticsConnectionString の設定に指定されていること。
    既定では、エミュレートされたストレージ アカウントが指定されているため、アプリケーション パッケージをデプロイする前に、この設定を明示的に変更する必要があります。 この設定を変更しないと、ロール インスタンスが診断モニターを起動しようとしたときに例外がスローされます。 このイベントは、ロール インスタンスが無限にリサイクルされる原因となる場合があります。
  • 接続文字列は次の 形式で指定します。 (プロトコルには HTTPS を指定する必要があります。)MyAccountName には該当するストレージ アカウントの名前を、MyAccountKey には該当するアクセス キーを指定してください。
DefaultEndpointsProtocol=https;AccountName=MyAccountName;AccountKey=MyAccountKey

Azure Tools for Microsoft Visual Studio を使用してアプリケーションを開発している場合は、プロパティ ページを使用してこの値を設定できます。

エクスポートした証明書に秘密キーが含まれていない

Web ロールをトランスポート層セキュリティ (TLS) で実行するには、エクスポートした管理証明書に秘密キーが含まれていることを確認する必要があります。 Windows 証明書マネージャーを使用して証明書をエクスポートする場合は必ず、 [Export the private key (秘密キーをエクスポートします)] オプションに [はい] を選択してください。 証明書は .pfx 形式でエクスポートする必要があります。現在サポートされている形式はこれのみです。

次のステップ

クラウド サービスの他の トラブルシューティングに関する記事 を参照します。

他のロール リサイクル シナリオを確認するには、 Kevin Williamson によるブログ シリーズをご覧ください。