Microsoft Azure クラシック仮想マシン (VM) アーキテクチャのワークフロー

重要

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

この記事では、仮想マシンなどの Azure リソースをデプロイまたは更新するときに発生するワークフロー プロセスの概要を示します。

Note

Azure には、リソースの作成と操作に関して、2 種類のデプロイ モデルがあります。Resource Manager とクラシックです。 この記事では、クラシック デプロイ モデルの使用方法について説明します。

次の図は、Azure リソースのアーキテクチャを表しています。

<alt Azure ワークフローに関する画像>

ワークフローの基本

A. RDFE/FFE は、ユーザーからファブリックへの通信パスです。 RDFE (RedDog Front End) は、管理ポータルに対するフロントエンドであるパブリックに公開された API、および Visual Studio や Azure MMC などのクラシック デプロイ モデル API です。 ユーザーからのすべての要求は、RDFE を経由します。 FFE (Fabric Front End) は、RDFE からファブリック コマンドに要求を変換するレイヤーです。 RDFE からのすべての要求は、FFE を経由してファブリック コントローラーに到達します。

B. ファブリック コントローラーは、データ センター内のすべてのリソースの管理と監視を担当します。 ゲスト OS のバージョン、サービス パッケージ、サービスの構成、サービスの状態などの情報を送信するファブリック OS 上のファブリック ホスト エージェントと通信します。

C. ホスト エージェントはホスト OS 上に存在し、ゲスト オペレーティング システムの設定を担います。 また、ゲスト エージェント (WindowsAzureGuestAgent) との通信を処理して、意図した目標の状態に向けてロールを更新し、ゲスト エージェントでハートビート チェックを行います。 ホスト エージェントは、ハートビート応答を 10 分間受信しなかった場合、ゲスト オペレーティング システムを再起動します。

C2. WaAppAgent は、WindowsAzureGuestAgent.exe のインストール、構成、および更新を担当します。

D. WindowsAzureGuestAgent は、以下のタスクを担います。

  • ファイアウォール、ACL、LocalStorage リソース、サービス パッケージと構成、証明書を含むゲスト OS の構成。
  • ロールを実行するユーザー アカウントの SID の設定。
  • ファブリックへのロールの状態の通信。
  • WaHostBootstrapper の開始、およびロールが目標の状態であることを確認するための監視。

E. WaHostBootstrapper は、以下のことを担当します。

  • ロールの構成の読み取り、およびロールを構成して実行するためのすべての適切なタスクとプロセスの開始。
  • すべての子プロセスの監視。
  • ロール ホスト プロセスでの StatusCheck イベントの生成。

F. ロールが完全な IIS Web ロールとして構成されている場合は、IISConfigurator が実行されます。 以下の処理を担います。

  • 標準 IIS サービスの開始
  • Web 構成での書き換えモジュールの構成
  • サービス モデルの構成済みロールに対する AppPool の設定
  • DiagnosticStore LocalStorage フォルダーを指すように IIS ログを設定
  • アクセス許可と ACL の構成
  • Web サイトは %roleroot%:\sitesroot\0 に存在し、AppPool は IIS を実行するためにこの場所を参照します。

G. ロール モデルではスタートアップ タスクが定義され、WaHostBootstrapper によって開始されます。 スタートアップ タスクはバックグラウンドで非同期に実行するように構成でき、ホスト ブートストラップ ローダーはスタートアップ タスクを開始してから、他のスタートアップ タスクに進みます。 スタートアップ タスクは、簡易 (既定) モードで実行するように構成することもできます。 簡易モードでは、ホスト ブートストラップ ローダーはスタートアップ タスクの実行が完了するのを待機し、次のスタートアップ タスクに進む前に成功 (0) 終了コードを返します。

H. これらのタスクは、SDK の一部であり、ロールのサービス定義 (.csdef) でプラグインとして定義されています。 スタートアップ タスクに展開されるとき、DiagnosticsAgentRemoteAccessAgent は、2 つのスタートアップ タスクが定義されている点が他とは異なります。1 つは通常のもので、もう 1 つは /blockStartup パラメーターを含みます。 通常のスタートアップ タスクはバックグラウンド スタートアップ タスクとして定義されているので、ロール自体の実行中にバックグラウンドで実行できます。 /blockStartup のスタートアップ タスクは、簡易スタートアップ タスクとして定義されているので、WaHostBootstrapper はそれが終了するまで待ってから続行します。 /blockStartup タスクは、通常のタスクの初期化が終了するのを待った後で終了し、ホスト ブートストラッパーが続行できるようにします。 このプロセスは、/blockStartup タスクによるロール プロセスが開始される前に、診断と RDP アクセスを構成できるようにするためです。 このプロセスにより、ホスト ブートストラップ ローダーが、通常、タスクを通じて実行される起動タスクを完了した後も、診断と RDP アクセスを引き続き実行できるようになります。

I. WaWorkerHost は、通常の worker ロール用の標準ホスト プロセスです。 このホスト プロセスでは、ロールのすべての DLL と、OnStart や Run などのエントリ ポイントのコードがホストされています。

J. WaIISHost は、完全な IIS を使用する Web ロールに対するロール エントリ ポイント コード用のホスト プロセスです。 このプロセスでは、RoleEntryPoint クラスを使用する DLL で最初に見つかったものが読み込まれ、このクラスからコードが実行されます (OnStart、Run、OnStop)。 RoleEntryPoint クラス内で作成されるすべての RoleEnvironment イベント (StatusCheck や Changed など) は、このプロセスで発生します。

K. W3WP は標準の IIS ワーカー プロセスであり、ロールが完全な IIS を使うように構成されている場合に使われます。 このプロセスは、IISConfigurator から構成された AppPool を実行します。 ここで作成されるすべての RoleEnvironment イベント (StatusCheck や Changed など) は、このプロセスで発生します。 両方のプロセスでイベントをサブスクライブしている場合、RoleEnvironment イベントは両方の場所 (WaIISHost と w3wp.exe) で発生します。

ワークフローのプロセス

  1. ユーザーは、".cspkg" ファイルや ".cscfg "ファイルのアップロード、リソースへの停止通知、構成の変更など、要求を行います。 要求は、Azure portal またはクラシック デプロイ モデル API を使用するツール (Visual Studio 発行機能など) を使用して行うことができます。 この要求は、RDFE に送られてサブスクリプション関連のすべての処理が行われた後、FFE に送られます。 ワークフローのこれらの手順の残りの部分では、新しいパッケージをデプロイして開始します。
  2. FFE で (アフィニティ グループや地理的な場所などのお客様からの入力に加えて、マシンの可用性などのファブリックからの入力に基づいて) 適切なマシン プールが検索され、そのマシン プール内のマスター ファブリック コントローラーとの通信が行われます。
  3. ファブリック コントローラーで、使用可能な CPU コアを持つホストが検索されます (または、新しいホストが起動されます)。 サービス パッケージと構成がホストにコピーされ、ファブリック コントローラーとホスト OS 上のホスト エージェントとの間で通信が行われて、パッケージがデプロイされます (DIP、ポート、ゲスト OS などが構成されます)。
  4. ホスト エージェントによって、ゲスト OS が開始され、ゲスト エージェント (WindowsAzureGuestAgent) との通信が行われます。 ホストによって、ゲストにハートビートが送信され、ロールがその目標とする状態に向かって動作していることが確認されます。
  5. WindowsAzureGuestAgent によって、ゲスト OS (ファイアウォール、ACL、LocalStorage など) が設定され、新しい XML 構成ファイルが c:\Config にコピーされてから、WaHostBootstrapper プロセスが開始されます。
  6. 完全な IIS Web ロールの場合、WaHostBootstrapper によって IISConfigurator が開始され、Web ロールの既存の AppPool を IIS から削除するように指示されます。
  7. WaHostBootstrapper によって、スタートアップ タスクが E:\RoleModel.xml から読み取られて、スタートアップ タスクの実行が開始されます。 WaHostBootstrapper は、すべての簡易スタートアップ タスクが完了して、成功メッセージが返されるまで待機します。
  8. 完全な IIS Web ロールの場合、WaHostBootstrapper によって、IIS AppPool を構成してサイトで E:\Sitesroot\<index> をポイントすることを指示する通知が IISConfigurator に送られます。<index> は、サービスに対して定義されている <Sites> 要素の 0 から始まるインデックスの番号です。
  9. WaHostBootstrapper によって、ロールの種類に応じたホスト プロセスが開始されます。
    1. worker ロール: WaWorkerHost.exe が開始されます。 WaHostBootstrapper によって OnStart() メソッドが実行されます。 それが終了した後、WaHostBootstrapper によって Run() メソッドの実行が開始されるのと同時に、ロールが準備完了としてマークされて、ロード バランサーのローテーションに入れられます (InputEndpoints が定義されている場合)。 その後、WaHostBootsrapper はロールの状態をチェックするループに入ります。
    2. 完全な IIS Web ロール: aIISHost が開始されます。 WaHostBootstrapper によって OnStart() メソッドが実行されます。 それが終了した後、Run() メソッドの実行が開始され、同時に、ロールが準備完了としてマークされて、ロード バランサーのローテーションに入れられます。 その後、WaHostBootsrapper はロールの状態をチェックするループに入ります。
  10. 完全な IIS Web ロールへの Web 要求の着信でトリガーされた IIS により、W3WP プロセスが開始されて、要求の処理が行われます。これは、オンプレミスの IIS 環境の場合と同様です。

ログ ファイルの場所

WindowsAzureGuestAgent

  • C:\Logs\AppAgentRuntime.Log。
    このログには、開始、停止、新しい構成など、サービスへの変更が含まれます。 サービスが変更されない場合、このログ ファイルには時間の大きなギャップがあることが予想できます。
  • C:\Logs\WaAppAgent.Log。
    このログは、状態の更新とハートビート通知が含まれ、2 - 3 秒ごとに更新されます。 このログにはインスタンスの状態の履歴ビューが含まれ、インスタンスが準備完了状態ではなかったときがわかります。

WaHostBootstrapper

C:\Resources\Directory\<deploymentID>.<role>.DiagnosticStore\WaHostBootstrapper.log

WaIISHost

C:\Resources\Directory\<deploymentID>.<role>\WaIISHost.log

IISConfigurator

C:\Resources\Directory\<deploymentID>.<role>\IISConfigurator.log

IIS ログ

C:\Resources\Directory\<guid>.<role>.DiagnosticStore\LogFiles\W3SVC1

Windows イベント ログ

D:\Windows\System32\Winevt\Logs