🔋

Azure Virtual Desktopの個人型ホストプールにおける電源管理をスケーリングプランにより実現する

2023/08/03に公開

モチベ

  • 先日、AVDにおける個人型ホストプールにおけるスケーリングプランがパブリックプレビューとなったので試したい Microsoft Ignite 2023 にて GAしました。

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/whats-new#autoscale-for-personal-host-pools-is-currently-in-preview

  • Microsoft Ignite 2023 で発表されたスケーリングプランの Hibernate 利用については こちらの記事をご参照ください。

環境

Azure AD JoinのAVD環境を個人型ホストプールで作るだけ。
このあたりを参考にしてもいいですし、ネット上にいろいろ情報はあるかと。

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/azure-ad-joined-session-hosts

スケーリングプランの作成

今回プレビューとなった機能であるスケーリングプランを作成する

  • Azure Portalの検索窓で[スケーリングプラン]を検索し、作成する

  • [個人用]でスケーリングプランを作成

スケジュールの追加

  • スケジュールを追加する。[全般]は適当に入れる。通常は平日の運用になるはず。

ランプアップ

あくまで、設定した時間帯に応じてどの様に稼働させるかという話なので、[ランプアップ]という言葉の意味についてはプール型のホストプールの場合と違って意識しなくていい。

  • 接続時にVMを起動する(Start VM on Connect)
    • 基本[はい]でよさそう。
  • 起動するVM
    • ここは、ランプアップ時間になったときに起動するVMを選択する
    • [割り当てられたVMのみ]:ホストプールに属しているが明示的にユーザが割り当たっていないVMは起動しない設定
    • [割り当て済みVMと未割当てVM]:ユーザが割り当たっていないVMも含めてホストプールに属しているVMは全台起動しておく設定
    • 上記2つのオプションは、ランプアップ時間になったら使用される可能性のあるVMは全台起動して待機という考え方
    • [開始時刻にVMをオンにしない]:ランプアップの時間になってもVMを一斉起動はせずに、あくまでユーザからの接続をもって起動させるという動き
      • なので、このオプションを選択する場合には[接続時にVMを起動]を[はい]にしないと手動でセッションホストを起動しない限りユーザがアクセスできない状態になる
  • 切断の設定:切断とはサインアウトはしてないけどセッションが切断されている状態、ブラウザのクローズ等を指す
    • [切断時間]:切断されてx分経ったら
    • [実行]:シャットダウンする ot しない
  • ログオフの設定:ログオフなので、明示的なサインアウトによりセッションが終了した状態
    • [ログオフ時間]:ログオフしてx分経ったら
    • [実行]:シャットダウンする ot しない

他の期間も同じように設定する

ピーク時間

  • ここでは9:00-の時間帯

ランプダウン

  • ここでは18:00-の時間帯

ピーク時以外の時間

  • ここでは20:00-の時間帯

この時点の予測

  • [切断]はセッションを実際に確立>切断の流れをとらないとシャットダウンされなさそう
  • [ログオフ]はセッションが確立>ログオフの流れをとらずとも、起動しているものはすべてシャットダウンしてくれそう

スケーリングプランの割り当て

  • スケーリングプランの画面でそのまま割り当てる

  • と思ったら、エラーで割り当てられなかった

  • どうやらAVDのサービスプリンシパルに[Desktop Virtualization Power On Off共同作成者]ロールを割り当てる必要がある

    • 確かに、AVD側で自動でVMのオンオフやってくれるのだから権限必要か、という感じ

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/autoscale-scaling-plan?WT.mc_id=Portal-fx&tabs=pooled-autoscale#assign-the-desktop-virtualization-power-on-off-contributor-role-with-the-azure-portal

AVDサービスプリンシパルへの権限付与

一応Docsの手順に従う

  • Azure Active Directoryの概要画面から、9cdead84-a844-4324-93f2-b2e6bb768d07を検索

  • プロパティの情報を確認

    • 名前:Azure Virtual Desktop>おそらくここは共通のはず
  • リソースグループで[アクセス制御(IAM)]を開いてDesktop Virtualization Power On Off Contributorを選択

  • プロパティ情報で確認したプリンシパル名を検索し、割り当てる

  • 権限が付与されたため、再度スケーリングプランをホストプールに割り当てると成功

動作確認

切断の場合

  • 予め、デスクトップアプリケーションにログインしてセッションを確立しておく

  • 15:26 デスクトップの表示を閉じ、セッションを切断

  • [ピーク時間]にあたるため、5分後にセッションホストが落ちるはず。5分放置。

  • 5分以上経過したタイミングで見てみると、VMがシャットダウンされている

  • ただし、割り当ての無いVMについてはシャットダウンがかからない

  • 再度、デスクトップアプリケーションに接続しようとすると、[ピーク時間]の設定に従ってVMの起動(Start VM on Connect)が走る

では、ログオフの場合どうなるのか?

  • ユーザの割り当てがないVMがシャットダウンされるか否か

    • シャットダウンされないとすると、ランプアップ時間で一斉起動したVMで割り当ての無いものは一生起動し続けることになる
    • だからこそ割り当ての無いVMを起動するか否かのオプションがあるとも読めるが、、、?
  • 現在時刻の含まれる[ピーク時間]にて、ログオフの設定を入れる

  • 5分以上放置してセッションホストの一覧を見てみると、誰にも割り当たっていないセッションホストがシャットダウンされた

    • つまり、「ユーザが割り当たっているVMのログオフ」も、「ユーザが誰も割り当たっていないVM」も対象になるということ
    • これによって、ランプダウンやピーク時以外の時間帯で、ランプアップで起動したVMは(セッションがなければ)最終的にすべてシャットダウンすることができる
    • そして翌日、またランプアップ時間にVMが起動するというサイクル

ダメ押し

  • これに加えて、アイドルセッションの切断についてはGPOのこのあたりを設定しておけばよい

  • アイドルセッションの切断ではなく終了の場合はこのあたり

おわり

  • プール型と個人型のスケーリングプランは全く別物
  • 個人型の方が、電源管理のイメージが付きやすい
  • プール型を同時接続1で個人利用する場合には、個人型のスケーリングプランを利用できないため電源管理はもう少し複雑になるはず
    • 近しいことはできるのかもしれない
GitHubで編集を提案
Microsoft (有志)

Discussion