Windows 10 Pro な Azure VM を AVD セッション ホストに変える
TL;DR
- Windows 10 Pro な Azure VM を Azure Virtual Desktop のセッション ホストに変え隊
- SxSStackListenerCheck が Success にならない事象にこまっていたが、Windows Enterprise を使っていないのが原因だった
- hibernate + Start VM on Connect でコスト最適化の 余地が残されていない 状態に
はじめに
ちょっと社外の方に環境を社内 (につながる環境) をお貸しすることになって、そのために一旦 Azure VM として Windows 10 Pro を立てて使っていただいておりました。
が、せっかくなので Azure Virtual Desktop (AVD) の hibernate 使ってコスト最適化したいな☆、と思い立ち、でも一応データそのまま持っていけたらいいよな、ということでその Azure VM をセッション ホストに変えることにしました。
今さら Windows 10 かよー、というご意見もあるかもですが、はい、まぁそのうち、なんとか。
AVD の session host にするためには
RDAgent と RDAgentBootLoader のインストールが必要です。
ホスト プールにセッション ホストを追加する や AVDエージェントサイレントインストール手順について を参考に以下のようなコマンドを実行します。
<RegistrationToken>
のところは、Azure Portal の Azure Virtual Desktop > Host pool から、Registration key をコピーしてきてください。
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RWrmXv -OutFile .\Microsoft.RDInfra.RDAgent.Installer-x64.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I Microsoft.RDInfra.RDAgent.Installer-x64.msi /quiet REGISTRATIONTOKEN=<RegistrationToken>'
Remove-Item .\Microsoft.RDInfra.RDAgent.Installer-x64.msi
Invoke-WebRequest -Uri https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RWrxrH -OutFile .\Microsoft.RDInfra.RDAgentBootLoader.Installer-x64.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I Microsoft.RDInfra.RDAgentBootLoader.Installer-x64.msi /quiet'
Remove-Item .\Microsoft.RDInfra.RDAgentBootLoader.Installer-x64.msi
SxSStackListenerCheck が Success にならない
RDAgent と RDAgentBootLoader のインストールが完了しても、セッション ホストの Health check status を見ると SxSStackListenerCheck だけが Success になりませんでした。
何度か再起動しても変わらず、、と思っていたら、docs に記載がありました。
サイドバイサイド スタックは、Windows Enterprise または Windows Server SKU でのみサポートされています。つまり、Pro VM などのオペレーティング システムはサポートされません。 Enterprise や Server SKU がない場合、スタックは VM にインストールされますが、アクティブ化されないため、コマンド ラインで qwinsta を実行したときに表示されません。
Azure Virtual Desktop エージェントに関する問題をトラブルシューティングする - Azure
ということで、適切にライセンスをつけたユーザーがいることを確認しつつ、プロダクト キーを入れ替え、Windows 10 Pro から Windows 10 Enterprise に変更しました。
プロダクト キーは Windows Server および Windows のキー管理サービス (KMS) クライアントのライセンス認証とプロダクト キー にあるので、今回は「NPPR9-FWDCX-D2C8J-H872K-2YT43」にしておきます。
その他
細かいところを設定していきます。
Scaling plan
Personal でも Scaling plan が使えるようになっており、「スケーリング」というニュアンスとはちょっと違いますが、要はユーザーのログイン・ログオフ・アイドル時間などを契機にセッション ホストを起動・停止できます。
んで、最近、hibernate というのが追加されましたので、こちらを使って設定しておきます。
注意点としては以下のような点でしょうか。(実際ハマった)
- Azure VM の SKU に制限がある
- v5 シリーズにしておけば大体大丈夫
- 仮想メモリ (Virtual memory) が C:\ に無いと有効化できない
- 一時ディスク (D:\) がついている Azure VM の場合、Virtual memory は既定で D:\ に設定されているため、設定を変更し、再起動する必要があります
-
{"code":"VMExtensionProvisioningError","message":"VM has reported a failure when processing extension 'AzureHibernateExtension' (publisher 'Microsoft.CPlat.Core' and type 'WindowsHibernateExtension'). Error message: 'Page file is in temp disk. Please move it to OS disk to enable hibernation.'. More information on troubleshooting is available at https://aka.ms/vmextensionwindowstroubleshoot. "}
っていうエラーが出ます、分かりやすい
詳細は、休止状態の概要 - Azure Virtual Machines を見ていただければと思います。
仮想メモリ (Virtual memory) の設定変更
念のためスクショを張っておきます。
手元の Windows 11 のマシンでの設定画面ですが、Windows 10 でも大体同じかと思います。
コントロール パネル の システム みたいなところをクリックします。
Control panel - System
Windows 11 だとこっから 設定 (Settings) アプリに飛ばされますが、システムの詳細設定 (Advanced system settings) をクリックします。
Settings app - System > About
んで、少し深いところに設定項目があります。
ここは Performance の枠の中の Settings をクリックします。
Control panel - System properties
Virtual memory の中の Change をクリックします。
Control panel - Performance options
この画面では Automatically - (自動でうんぬん) になっていて、これでもいいですし、C:\ ドライブに System managed size とかにしておいてもいいかなと思います。
Control panel - Virtual memory
設定変更した場合には、反映のため再起動が求められます。
動作確認
ということで、いい感じに hibernate されるとこんな感じに見えます。
Azure Virtual Desktop - session host - hibernated
この状態であれば Azure VM として 割り当て解除 (deallocated) と同じ状態になり、Azure VM の部分の課金が止まります。
また、Start VM on Connect にも対応しているので、翌朝接続しようと試みたその瞬間に、数分待っていただければ、オンデマンドに Azure VM が起動します。
hibernate を利用しているので、開いていたアプリケーションもあらやだそのまま戻ってきます。
まとめ
あんまりやらないケースだとは思いますが、取り合えず Windows Pro な Azure VM を立てて踏み台がてら使っていたが、せっかくだし AVD に変えてみるか、という方には参考になるかもしれません。
通常の Azure VM であればコスト最適化は Start/Stop VMs v2 の概要 などを使うことがありますが、こちらはオンデマンドの起動には対応していません。
今日はちょっと早くから仕事しようかな、、に対応できるのは AVD の Start VM on Connect のメリットの 1 つです。
一応ちゃんと Windows Enterprise のライセンスを持っている前提なので問題ないかとは思いますが、どこかからダメだよ、って突っ込まれたら直します。。
参考
- Azure Virtual Desktop のライセンス
- ホスト プールにセッション ホストを追加する
- AVDエージェントサイレントインストール手順について
- Azure Virtual Desktop エージェントに関する問題をトラブルシューティングする - Azure
- Windows Server および Windows のキー管理サービス (KMS) クライアントのライセンス認証とプロダクト キー
- 休止状態の概要 - Azure Virtual Machines
- Start/Stop VMs v2 の概要
-
Microsoft x おれたちのコスト最適化バトル (改)
コスト最適化についてイベント登壇したときのスライドもぜひ
- AVD RdAgent とかを再インストールする PowerShell Cmdlet (2024/04 版)
-
VM の Hibernate を AVD の個人型ホストプールのスケーリングプランで利用する
zukako-san の書いてるここら辺の記事も参考になります、hibernate とかはこちらの方が詳細に書いてある
- Azure Virtual Desktopの個人型ホストプールにおける電源管理をスケーリングプランにより実現する
Update log
- tag の追加とか - 2024/07/14
-
$ProgressPreference = 'SilentlyContinue'
を追加 - 2024/08/20
Discussion