Azure Virtual Desktop (AVD) セッションホストの自動停止を試す!

Azureでは仮想マシンを停止する事で利用料金を安く抑える事ができます。Azure Virtual Desktop (AVD)のように大量に仮想マシンを展開するソリューションに対しては、コストに大きな影響を与えます。

そこで今回は、長年の夢であった、セッションホストの自動停止を試してみたいと思います!

【動作のしくみ】

① ホストプール単位でセッションホストへのセッションの有無を確認します。
② セッションが無いセッションホストにはシャットダウンを実施します。
③ このスクリプトを定期的にファンクションにて実行します。
※本スクリプトは公式ではなく、サポートもありません。

※ドレインモードのセッションホストはシャットダウンの対象外となります。


それでは、やってみよう!!

事前に、RDPセッションを「切断」状態にするために、GPOにて設定を行います。

Windows Virtual Desktop 用のマスターイメージを作成してみる!
※Step3を参照ください。

[検索:関数アプリ]

関数アプリ名:※ユニークである必要があります。
公開:[コード]を選択
ランタイム スタック:[PowerShell Core]を選択
バージョン:最新バージョンを選択
地域:セッションホストが存在するリージョンを選択

作成した関数アプリを選択ー[アプリ ファイル]ー[requirements.psd1]を選択
“#”を削除し[保存]します。

[概要]ー[再起動]を選択

[ID]ー[状態:オン]を選択し保存します。

[Azureロールの割り当て]を選択

[+ロールの割り当ての追加]を選択
※「デスクトップ仮想化の閲覧者」「仮想マシン共同作成者」を割り当てます。

[関数]ー[+作成]を選択

テンプレート:[Timer trigger]を選択
新しい関数:表示名
Schedule:※例では、毎時00分に実行します。
{second} {minute} {hour} {day} {month} {day-of-week}

※スケジュール時刻を変更する際は、[コードとテスト]ー[function.json]を選択

[コードとテスト]ー[run.ps1]を選択し、ここにあるPSスクリプトで上書きし[保存]します。

作成済みセッションホストの”HostPool”と”HostPoolRG”を記入します。
複数のホストプールが存在する場合は、赤枠部分をコピペし追記します。

これにて、設定は完了です!


スクリプトをテストしてみる。

先ずは、セッションホストホストを起動し、”Test-2″に対しては、ユーザーから接続した
状態にしておきます。

[コードとテスト]ー[テストと実行]を選択

[実行]を選択

実行するとログを確認する事ができます。

ユーザーからの接続がない”Test-1″は停止されました。