Azure Virtual Desktop「セッションホストがUnavailable」の原因と対処|AVDエージェント登録失敗・ネットワーク疎通・ドメイン参加チェック完全ガイド

新規にホスト プールを作ったのに、セッションホストが「Unavailable」のままでユーザーが入れない――Azure Virtual Desktop(AVD)で最も多い初期トラブルのひとつです。本記事は、再現性の高い原因から優先順に切り分ける実務手順を、ログの見方・コマンド例・運用ノウハウとともに体系化しました。読み進めながら上から順に確認すれば、その場で復旧までたどり着けます。

目次

結論(まずはここから):最短で直すための手順

「Unavailable」の大半は エージェント登録・ネットワーク疎通・ドメイン参加 のどれかで詰まっています。迷ったら、以下の順で実行してください。

  1. セッションホストの OS にログオン(Azure Bastion/一時的な 3389 開放/コンソール等)
  2. イベント ビューアーで WVD‑Agent / RDAgentBootLoader / MsiInstaller を確認し、INVALID_REGISTRATION_TOKEN・サービス起動失敗・インストール失敗を探す
  3. エージェント/ブートローダーを最新版へ入れ直し(登録トークンはホスト プールの Registration Key を使用)
  4. アウトバウンド疎通(TCP 443 と UDP 3391)が NSG/ファイアウォール/プロキシで許可されているか検証(TLS インスペクションは回避)
  5. ドメイン参加状態を修復(Azure AD Join または AD DS へ手動参加 → 再起動)
  6. AVD Insights を有効化し、接続/認証/セッション管理の失敗イベントを時系列で可視化

この順路で多くの環境が復旧します。以下で詳細を解説します。

症状の定義と背景

AVD のセッションホスト状態は Broker 側が受け取る エージェントのハートビート といくつかのヘルス シグナルから決まります。VM 自体が稼働中でも、エージェント未登録・ネットワーク遮断・ドメイン不整合などで Broker に到達できない場合、ポータルや API では 「Unavailable」 と表示され、ユーザーは接続不可になります。

  • Available:ハートビート良好。接続受付可
  • Unavailable:Broker から到達不能/エージェント異常/前提条件未満
  • Needs assistance:更新や構成の手当が必要(エージェント更新・再起動など)
  • Shutdown:VM 停止中/割り当て解除

原因と解決策(一覧)

主なチェック項目内容・対処
① AVD エージェントの登録失敗セッションホストの イベント ビューアー → WVD‑Agent / RDAgentBootLoader / MsiInstaller を確認し、INVALID_REGISTRATION_TOKEN やサービス起動失敗を調査。エージェントやブートローダーが入っていない/停止している場合は最新版を再インストールし、サービスを再起動。
② ネットワーク/ポート疎通セッションホストから TCP 443(必須)と UDP 3391(推奨)がインターネットおよび AVD サービスへ到達できるか、NSG/ファイアウォール/プロキシで確認・許可。TLS インスペクション(SSL 復号)がある場合は AVD 向け通信をバイパス。
③ ドメイン参加状態VM が Azure AD またはオンプレ AD に参加できていないケースあり。手動でドメイン参加 → 再起動 により「Unavailable」が解消された実例多数(本件もこれで解決)。
④ サブスクリプション/クォータAzure Service Health でリージョン障害を確認。合わせて CPU・NIC などのクォータ不足がないか点検。
⑤ Insights で追加診断ポータルの Azure Virtual Desktop Insights を有効化し、接続/認証/セッション管理の失敗イベントを可視化して原因を絞り込み。

上表を順に確認すれば、ほとんどの「Session host is unavailable」問題は解消できます。

現場で使えるチェックリスト(詳細版)

カテゴリ主なサイン確認コマンド/ログ対処
エージェント登録Broker に登録されない/状態が Unavailable のままイベント ビューアー:WVD‑Agent / RDAgentBootLoader / MsiInstaller サービス状態確認:Get-Service *RDAgent*登録トークンの有効期限を再発行 ブートローダー → エージェントの順で再インストール 再起動後に状態更新を待機
ネットワークTLS ハンドシェイク失敗/タイムアウト/UDP 不可Test-NetConnection -ComputerName <AVD ゲートウェイ FQDN> -Port 443 Test-NetConnection -ComputerName <AVD ゲートウェイ FQDN> -Port 3391 NSG:Service Tag AzureVirtualDesktop を許可アウトバウンド 443/UDP 3391 を開放 SSL/TLS インスペクションをバイパス プロキシ設定の例外に AVD ドメインを追加
ドメイン参加Azure AD Join / Hybrid Join / AD DS 参加が未完了dsregcmd /status(Azure AD 加入) システムのプロパティ → ドメイン参加手動で参加 → 再起動 Azure AD Join では RBAC「Virtual Machine Administrator/User Login」を VM に割り当て
時間・証明書時刻ずれ/TLS 1.2 無効で失敗w32tm /query /status レジストリで TLS 1.2 有効化を確認NTP 同期の正常化(Azure ホスト時刻と整合) TLS 1.2 を有効化
拡張機能VM 拡張のデプロイが失敗/保留ポータルの「拡張機能」で状態を確認失敗している拡張を削除→再デプロイ

実例:ドメイン未参加が原因で「Unavailable」になったケース

新規ホスト プールを作成後、セッションホストがずっと「Unavailable」。エージェントのインストールログは正常、ネットワークの 443/3391 も疎通。dsregcmd /status を確認すると「AzureADJoined : NO」。管理者が RDP で VM に入り、Azure AD へ参加 → 再起動 を実施したところ、数分後に「Available」へ遷移。以後はユーザー接続が安定しました。

  • 学び:Join の未完了はログの表現が散漫で見落としやすい。まず dsregcmd /status を見る。
  • 再発防止:イメージ作成手順書に「Join 確認」「VM への RBAC 付与」を追加。

ディープダイブ:原因別の直し方

AVD エージェント/ブートローダーの入れ直し

登録トークンの期限切れや、イメージ化時点の古い版が原因で起動直後に失敗することがあります。以下の順での再インストールが安定します。

  1. ホスト プールの Registration Key を新規発行(有効期限に注意)
  2. セッションホストで旧版をアンインストール(必要に応じて)
  3. BootLoader → Agent の順にインストール(BootLoader に Registration Key を指定)
  4. サービスを再起動し、イベント ビューアーで登録完了を確認

静的インストール例(ログ採取付き):

rem 管理者 PowerShell / CMD
msiexec /i "Microsoft.RDInfra.RDAgentBootLoader.msi" REGISTRATIONTOKEN=<発行したキー> /quiet /norestart /l*v C:\Windows\Temp\AVD_BootLoader.log
msiexec /i "Microsoft.RDInfra.RDAgent.msi" /quiet /norestart /l*v C:\Windows\Temp\AVD_Agent.log

sc query type= service state= all | findstr /i "rdinfra rdagent"
Get-Service *RDAgent* | Select-Object Name,Status | Format-Table 

よくある誤り:

  • 期限切れトークンでイメージ化→展開直後に INVALID_REGISTRATION_TOKEN
  • BootLoader 未設定で Agent のみ導入→登録処理が走らない

ネットワーク疎通(NSG/FW/プロキシ)

AVD はセッションホストから Broker/Gateway へ アウトバウンド 443 を必須とし、UDP 3391 を利用すると体感が大幅に向上します(利用不可でも「Unavailable」自体は直る場合あり)。企業プロキシや次世代ファイアウォールの TLS インスペクションが、Agent の認証を壊している例も多発します。

  • NSG は Service Tag AzureVirtualDesktop を許可すると運用が楽
  • プロキシ配下では バイパス の検討(PAC/静的例外)
  • SSL インスペクションは AVD ドメインを除外

検証コマンド:

# TCP 443
Test-NetConnection -ComputerName <ゲートウェイの FQDN> -Port 443 -InformationLevel Detailed

# UDP 3391(到達性の有無をまず確認)

Test-NetConnection -ComputerName <ゲートウェイの FQDN> -Port 3391 

ドメイン参加と VM ログオン権限

Azure AD Join/Hybrid Join/AD DS いずれでも、Join が完了し適切なログオン権限が付いていないと、Broker 側の接続準備が崩れます。

  • Azure AD Join:VM に Virtual Machine Administrator Login / Virtual Machine User Login を割り当て
  • Hybrid Join:ラインオブサイト(DNS/DC/時間同期)
  • AD DS:ドメイン参加 → 再起動 → 再試行

状態確認:

dsregcmd /status
whoami /groups
nltest /dsgetdc:&lt;ドメイン名&gt;
w32tm /query /status

時間同期・TLS

5 分以上の時刻ずれはトークン検証・TLS ハンドシェイクを落とします。ホストのタイムゾーン設定と NTP を標準化しましょう。TLS 1.2 を無効化している古いポリシーも要注意です。

Azure Monitor(AVD Insights)での可視化

ホスト プール単位で AVD Insights を有効にし、Log Analytics ワークスペースへデータ送信することで、障害の全体像が掴めます。特に「接続」「認証」「セッション管理」の 3 系列の失敗イベントを並べると、どの層で止まっているか が一目瞭然です。

KQL の例:

// セッションホストのヘルス
WVDCheckpoints
| where TimeGenerated > ago(24h)
| summarize arg_max(TimeGenerated, *) by SessionHostName
| project TimeGenerated, SessionHostName, State, Message

// 直近の接続失敗
WVDConnections
| where TimeGenerated > ago(24h)
| where Result != "Succeeded"
| project TimeGenerated, UserName, SessionHostName, Result, FailureReason 

サブスクリプションのクォータとリージョン障害

「利用者は少ないのに VM を増やすと一部だけ Unavailable」— こうした時は、裏でクォータ不足や基盤側のアラートが潜んでいます。コンピュート/NIC/パブリック IP のクォータを確認し、足りない場合は増枠申請を。並行してサービスヘルスをチェックし、リージョン側のイベントが無いか把握しておきましょう。

イメージ運用と「Unavailable」を生まない作り方

カスタム イメージを使う場合の注意

  • Sysprep の前提:最新の AVD エージェント/ブートローダーを含めつつ、登録トークンはイメージに埋め込まない 運用が安全です。展開時に新しい Registration Key を用いて登録を実施。
  • 更新自動化:Azure Image Builder/Azure Compute Gallery を活用し、パッチ適用とエージェント更新をパイプライン化。
  • 初回ブート時のレースコンディション対策:ブートローダーの登録前にプロキシ/証明書/時刻同期の GPO を適用できるよう、起動順を整備。

ゴールデン イメージの健全性チェック

# 主要サービスの存在と自動起動を確認
Get-Service | Where-Object {$_.DisplayName -like "*Remote Desktop*"} | Select-Object DisplayName, Status, StartType

# イメージ内のプロキシ設定確認(WinHTTP)

netsh winhttp show proxy 

運用者向け:PowerShell で一気に可視化・復旧

管理面からも状況を掴みます。以下は Az.DesktopVirtualization を用いた例です。

# モジュール導入(管理端末)
Install-Module Az.DesktopVirtualization -Scope CurrentUser -Force
Connect-AzAccount

# セッションホストの一覧と状態

Get-AzWvdSessionHost -ResourceGroupName  -HostPoolName  |
Select-Object Name, Status, AllowNewSession, SxSStackVersion | Format-Table

# 必要ならユーザー視点接続の簡易テスト

Test-AzWvdUserConnection -ResourceGroupName  -HostPoolName  -UserPrincipalName 

# メンテ時に新規セッション拒否(Drain)

Update-AzWvdSessionHost -ResourceGroupName  -HostPoolName  -Name  -AllowNewSession:$false 

PowerShell で状態を横断的に眺めると、1 台だけ「Unavailable」な異常個体や、特定バージョンのエージェントで不具合が出ている傾向を素早く拾えます。

プロキシ・セキュリティ製品の落とし穴

  • TLS インスペクション:AVD の制御通信は証明書ピン留め等の検証が厳格。復号・再暗号化により失敗することがあるため、AVD 向けはバイパス。
  • プロキシ認証:サービス起動直後のシステムアカウントでの通信は、認証プロキシを通過できない場合あり。機械アカウントのバイパス または 静的例外 を設ける。
  • SSL/TLS バージョン固定:古いポリシーで TLS 1.2 を落としていると、初回登録が失敗。

トラブル再発防止の運用設計

監視の最小構成

  • AVD Insights を有効化(ワークスペースは業務基盤のものへ集約)
  • SessionHost の Status が Unavailable に変化したら通知(アラート ルール)
  • Agent/BootLoader のイベント ID で重大度エラーをサブスクライブ

変更管理

  • ネットワーク系変更(プロキシ/FW/NSG)には AVD 回帰テスト を必ず紐付ける
  • イメージ更新時は「登録トークンが埋め込まれていないか」を CI で検査

ランブック(現場用)

  1. ポータルで「Unavailable」台数と共通点を把握(OS/ゾーン/スケールセット)
  2. 1 台に管理ログオン → イベント/サービス/疎通を 10 分で確認
  3. エージェント再インストール → 再起動
  4. Join 修復(必要なら)→ 再起動
  5. 復旧後に AVD Insights で前後の失敗率を確認し、原因を事後記録

よくある質問(FAQ)

Q. UDP 3391 が閉じていても「Unavailable」になりますか?

A. 多くの環境では 443 が生きていれば 状態自体 は Available に上がります。ただし体感品質(ラグ・音声・画面応答)は悪化するため、原則として 3391 も開けておくのが運用のベストプラクティスです。

Q. エージェントはどの順番で入れますか?

A. 一般に BootLoader → Agent の順が推奨です。BootLoader に Registration Key を与えて登録し、その後 Agent が制御を担います。

Q. カスタム イメージで毎回 Unavailable になります。

A. トークンの埋め込みや古いエージェントが原因のことが多いです。イメージには最新のコンポーネントを保持しつつ、登録は展開時 に行う設計へ改めましょう。

Q. Azure AD Join なのに、管理者がログオンできません。

A. VM に対する RBAC「Virtual Machine Administrator Login / User Login」が不足している可能性があります。割り当て後に反映まで数分かかる点にも留意してください。

切り分けを加速するスニペット集

イベント ログの一括収集

# 管理者 PowerShell
$logs = @(
  "Application",
  "System"
)
$channels = @(
  "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational",
  "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"
)
$dest = "C:\Windows\Temp\AVD_Logs_$(Get-Date -Format yyyyMMddHHmm).evtx"

wevtutil epl Application $dest
wevtutil epl System $dest
foreach ($c in $channels) { wevtutil epl $c ($dest + ".$((($c -replace '[\/]', '_'))).evtx") }

Get-Service *RDAgent* | Format-Table -Auto 

ネットワーク健全性の即席チェック

# 代表 FQDN への 443/3391 疎通確認(名称は自環境に合わせて)
$targets = @("rdweb.wvd.microsoft.com","rdbroker.wvd.microsoft.com")
$ports   = @(443,3391)
foreach ($t in $targets) {
  foreach ($p in $ports) {
    $r = Test-NetConnection -ComputerName $t -Port $p
    "{0}:{1} - {2}" -f $t,$p, ($r.TcpTestSucceeded ? "OK" : "NG") | Write-Host
  }
}

セッションホストの一斉 Drain/解除

# メンテナンス開始前に新規セッションを止める
Get-AzWvdSessionHost -ResourceGroupName &lt;RG&gt; -HostPoolName &lt;Pool&gt; |
% { Update-AzWvdSessionHost -ResourceGroupName &lt;RG&gt; -HostPoolName &lt;Pool&gt; -Name $_.Name -AllowNewSession:$false }

追加のヒント・注意点(要点まとめ)

  • カスタム イメージ利用時:Sysprep 前に AVD エージェントと BootLoader を最新化。登録トークンは展開時に付与する。
  • Azure AD Join 構成:VM に「Virtual Machine Administrator Login」「Virtual Machine User Login」ロールを割り当て。
  • 接続テスト:Test-AzWvdUserConnection でユーザー視点の接続可否を素早く検証。
  • SSL インスペクション回避:制御プレーン通信の復号は失敗要因。除外ルールを作成。
  • 時間同期:5 分以上のずれは TLS/トークン検証を壊す。NTP を整える。

まとめ:上から順に潰せば必ず直る

「Unavailable」は、エージェント登録・ネットワーク疎通・ドメイン参加の 3 点に絞って潰すのが最短です。まずログで登録の成否を確かめ、443/3391 のアウトバウンドを検証し、Join を是正。必要に応じて AVD Insights で失敗の位置を可視化しましょう。この記事のチェックリストとコマンドを手元に、現場の初動スピードを一段引き上げてください。

付録:コピーして使える実務テンプレート

現場チェックシート(印刷用)

項目Yes/Noメモ
Registration Key は有効期限内か□ / □
BootLoader → Agent の順でインストール済みか□ / □
TCP 443 のアウトバウンドは通るか□ / □
UDP 3391 のアウトバウンドは通るか□ / □
Azure AD / AD DS への参加は完了しているか□ / □
VM への RBAC(VM Admin/User Login)は付与済みか□ / □
時間同期/TLS 1.2 は有効か□ / □
AVD Insights は有効化されているか□ / □

現場エスカレーションの書式

[現象]
新規ホスト プール作成後、セッションホストが Unavailable

[試行済み]

* イベント ログ確認(WVD‑Agent / RDAgentBootLoader)
* Registration Key 再発行 → 再登録
* TCP 443 / UDP 3391 の疎通確認
* dsregcmd /status で Join 確認
* 再起動(症状変わらず)

[補足]

* プロキシ/FW の変更はなし
* AVD Insights の失敗イベント時刻は 2025-xx-xx xx:xx 

最後に:この記事の使い方

新人のオンボーディング資料、夜間当番のランブック、変更作業のチェックリストとして、そのまま運用現場に配布して使えます。迷ったら「エージェント → ネットワーク → ドメイン」の順でトラブルを狭める。これが AVD 運用の鉄則です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次