Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Azure Virtual Desktopアクセス時自動起動設定 番外編01～

Amazon WorkSpaces(以下、WorkSpaces)と Azure Virtual Desktop(以下、AVD)シリーズの8本目の派生記事です。
1本目は記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Amazon WorkSpaces事前準備編～](https://qiita.com/hidekko/items/c350d6dcc606247dd0a2)
2本目は記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Amazon WorkSpaces構築編～](https://qiita.com/hidekko/items/24e2f3e75d222c9e632e)
3本目の記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Amazon WorkSpaces MFA実装編～](https://qiita.com/hidekko/items/f3c8d1ec492b60ea7e20)
4本目の記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Azure Virtual Desktop事前準備編～](https://qiita.com/hidekko/items/cdfb0c4f9d6e2c776c53)
5本目の記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Azure Virtual Desktop構築編～](https://qiita.com/hidekko/items/0c7cbcce1c378e24d93a)
6本目の記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Azure Virtual Desktop MFA実装編～](https://qiita.com/hidekko/items/73f5a151778e7dc5c641)
7本目の記事はこちら
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～まとめ編～](https://qiita.com/hidekko/items/58d9aeece75d8ba71392)

まとめ編の記載後にAVDの便利な機能に気付いたので番外編の位置づけです。

# WorkSpacesのAutoStop機能について
2本目の記事、
[Amazon WorkSpaces と Azure Virtual Desktop 比較 ～Amazon WorkSpaces構築編～](https://qiita.com/hidekko/items/24e2f3e75d222c9e632e)でさらっと触れている、というか書いているだけのAutoStop機能ですが、なかなか便利で、どういう機能かというと、
**WorkSpacesのEC2が停止している状態で、ユーザが任意のタイミングでログオンすると、自動的にログオン対象のEC2が起動する**
という機能です。
メインの機能はEC2がアイドル(ユーザ未アクセス)状態になると、あらかじめ指定した時間が経過すると自動的にEC2をシャットダウンする、という機能です。
この自動シャットダウン機能と表裏一体で提供される自動起動なのですが、AzureのVMでも同じことができれば便利だなと常々思っていました。
まとめ記事を書いた後に調べたところ、AVDであれば<font color="Red">Start VM on Connect</font>という機能を使えばこの**VMが停止(割り当て解除済み)状態で、ユーザが任意のタイミングでアクセスしたらVMを起動させることができる**とわかったので、本記事はこの<font color="Red">Start VM on Connect</font>について記載していきます。
公式サイトはこちらです。
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/start-virtual-machine-connect?tabs=azure-portal

# 前提条件
当然AVDは構築済みです。
Start VM on ConnectはWorkSpacesのAutoStopのように、構築時に自動的に反映される機能ではなく、後から追加する機能です。

## 見えない前提条件
普通に構築してるとユーザが意識しない部分になっているのですが、本機能を使うにあたって意識する必要があるので記載しておきます。
まずAzure内のリソースは、操作しようとしているリソースの存在するサブスクリプションや対象リソースに対してどのような権限を持っているか、によってできる操作が変わってきます。
VMの起動、停止も同じです。
通常、Azure Portal経由でVMの起動/停止を行う場合は以下の図のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/55fef58c-af8e-558b-d30f-c83d2379c40c.png)
はい。
よくある認証/認可で、操作できる範囲が決まっている、という図ですね。
今回のStart VM on Connectは、<font color="Red">**AVDのサービスがユーザのアクセスを検知したタイミングで、アクセスしたユーザ、及びそのユーザの権限でAVDのサービスが対象のVMを起動するのではなく、AVDのサービスがアクセスしてきたユーザを判定し、該当ユーザがアクセス許可権限を持つVMを起動する**</font>というサービスです。
アクセスしたユーザがユーザの権限をもってVMを起動しているのではありません。
**Start on VM Connectは、AVDというサービスがVMを起動しています。**
ここが大事です。
これを図にすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/32e69a66-9d00-bf78-7f27-7ce86ee54d63.png)
こんな感じですかね。
ですのでStart on VM Connectは、AVDというサービスにVMの起動権限を付与するところから作業開始になります。

# Start VM on Connect追加設定
またしても前置きが長くなりましたが、Start VM on Connectの設定を行います。

## AVDにVMを起動できる権限を付与する
Azure Portalに権限操作を行える権限をもつユーザでログインし、右ペインから[サブスクリプション]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/0088e3a2-2284-95bc-f25c-7b9a05cbdc21.png)
右ペインにサブスクリプションがなければ[すべてのサービス]から検索してください。

Start VM on Connect設定対象のホストプールが存在する[サブスクリプション]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/b7f0e5cf-9e99-ca8a-2f7f-02e0756c8df7.png)
右ペインから[アクセス制御(IAM)]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/81b1d924-b378-ddaf-c2cf-e90087f6b55a.png)
[＋追加]をクリックし、展開される[ロールの割り当ての追加]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3923e4f8-5077-c64a-c282-eb7be10add1e.png)
ロール(役割)の検索ボックスが出てくるので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3fb09c59-5d4f-c15d-4a4c-686eba805b01.png)
[Desktop Virtualization Power On Contributor]と入力すると2つの権限が出てきますので、[Desktop Virtualization Power On Contributor]をクリックします。
(もう一つのDesktop Virtualization Power On Off Contributor権限はまた別記事で触れます。なんとこの権限を使うとAuto Scale機能が・・・)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/c6979285-c894-8bbb-3f92-8f249eba919f.png)
[次へ]をクリックし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/140b301c-58f0-1a3d-77bb-bf91efb6aafe.png)
[アクセスの割り当て先]を[ユーザ、グループ、またはサービスプリンシパル]を選択し、[メンバー]を[メンバーを選択する]をクリックし、出てきた[選択]ページの検索ボックスに[Azure Virtual Desktop]もしくは[Windows Virtual Desktop]と入力し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/c3c41c76-f6bb-16e2-7627-9cbab1563916.png)
[Azure Virtual Desktop]をクリックし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/86b095f7-df55-d897-2ba0-4594c3ce24bc.png)
[選択]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/888848c3-2ca7-e2c0-d428-67231359e5b6.png)
[レビューと割り当て]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/486a41f8-2459-0798-42a9-d112636cebf9.png)
再度[レビューと割り当て]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/91369598-8162-4b4d-4698-9b5b66744d4a.png)

これで作業の半分はおわりです。

## 対象のホストプールで、Start VM on Connect機能を有効にする
Azure Portalの右ペイン、若しくは[すべてのサービス]から[ホストプール]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3e746368-a9d7-5d97-1009-b06bcc5fba45.png)
対象のホストプールをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/866a3101-a9f9-7430-431e-19eec6687ec5.png)
[プロパティ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/f869391d-335a-32b4-39ac-12f85adb5cbd.png)
[接続時にVMを起動する]の項目はデフォルトで[いいえ]なので、これを[はい]に変更し、[保存]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/1f838ff4-fe84-0b3c-6f03-513fd808833e.png)

以上で作業は完了です。

# 動作確認
それでは動作確認です。
まずはホストプールに含まれるVMが停止していることを確認し、起動していたら停止しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3eb393f7-3ac6-cdeb-46ca-e6da0ebefbb7.png)
AVDのクライアントアプリケーションを起動し、セッションホストをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/c5d12e4f-2847-1f21-dcfb-3ec0ccc48335.png)
リモート接続開始の画面が出てきますが、すぐにはアクセスできませんが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/6daeb60a-2433-1e67-04e0-c6f0bdac8ac9.png)
[リモートPCを開始しています・・・]に変わり、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/81e52d07-3002-f00a-1964-09379dcce80c.png)
VMは比較的すぐに[実行中]に変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d801c9a1-7746-d7fc-ac4d-a81c11b834d5.png)
VMの起動がこの記事を書くために私がイカサマしていないことを確認するために、対象VMのActivity Logを見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/275f537a-6557-696f-aed2-e8c0e4323b7b.png)
私が①時間前にDeallocate、[停止(割り当て解除済み)]にしたVMが、2分前に[Azure Virtual Desktop]が[起動]した、とログにあります。
間違いないですね。
セッションホストをダブルクリックしてから、私の環境(US West 2)では3分かかって起動してきました。
ちょっと遅いかな、って気はしますが、VMのスペックを上げれば起動速度は比例して高速化可能です。

目標通り自動起動できましたね。
結構丁寧に、ほぼワンクリック単位で説明しましたが、おわかりいただけましたでしょうか？
結構簡単です。
<font color="Red">**Microsoft、始まってますね！**</font>

今回はここまで。