AzureでAzure Virtual Desktopの構築とStart VM on Connectを使ってみた

# 目次
1. はじめに
1. 前提条件
1. 構築手順
1. 動作確認
1. おわりに
1. 参考文献

# はじめに
この記事は [NTTテクノクロスAdvent Calendar 2022](https://qiita.com/advent-calendar/2022/ntt-tx) の 9日目の記事です。

NTTテクノクロスの谷澤です。
普段はAzure関連の業務をしています。

この記事では以下の内容をご紹介します。
- Azure で Azure Virtual Desktop を構築してみた際の手順
- Start VM on Connect を設定するまでの流れ
　
 

**Azure Virtual Desktop（AVD）とは？**
- Microsoft 365 アプリ や WindowsおよびWindows Serverのデスクトップを仮想化して利用することができるサービスです。
- 利用料金は以下の通り（参照元は[こちら](https://azure.microsoft.com/ja-jp/pricing/details/virtual-desktop/)）
※ 既存のライセンス（Windows または Microsoft 365）を使用する場合は以下のコストは不要
  - アプリケーションのみで1ユーザ当たり月額 5.5ドル
  - アプリケーション＆デスクトップで月額 10ドル
- その他、VM利用のための料金が発生（VM料金は[こちら](https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/windows/)を参照）

**Start VM on Connectとは？**
- AVDで構築したVMへ接続する際、対象のVMが停止している場合に自動で起動して接続を実行するサービスです。

# 前提条件
Microsoftドキュメントで提示されている前提条件は[こちら](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/prerequisites)
今回構築した環境においては以下を意識していれば十分だと思います。
  -  **サブスクリプションの 共同作成者 or 所有者 ロール** が割り当てられているAzureアカウントが使用できること

# 構築手順
以下のMicrosoftドキュメントの手順を参考に実施しました。
- [チュートリアル: ホスト プールを作成する](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/create-host-pools-azure-marketplace?tabs=azure-portal)
- [チュートリアル:Azure portal を使用してアプリ グループを管理する](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/manage-app-groups)

## Azure Virtual Desktopの作成
- 作成されるリソースは主に4種類あります。
  - ホストプール
  - アプリケーショングループ
  - ワークスペース
  - VM(+ OSディスク等の周辺リソース)


### ホストプールの作成
1. Azureポータルで「Azure Virtual Desktop」を検索して対象サービスをクリック
1. 「概要」ブレードにある「ホストプールの作成」をクリック
![create_AVD_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/007b53b3-cf90-40a2-a099-1d5f51534993.png)
1. 画面に従って設定値を入力していく
    - 基本
  ![create_AVD_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/17694426-bbff-0ce8-c716-8e4eaa799bbd.png)
    - 仮想マシン(1)
  ![create_AVD_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/f974f098-1809-7882-8165-6aeb826310bc.png)
    :::note info 
    - 備考
      - 仮想マシンのサイズによってはサポートされていないOSイメージもあるので要注意。
ポータルの作成画面上では未サポートの組み合わせでも警告文などは表示されない。
        - サポートされていない組み合わせだと、VMのデプロイ時に以下のエラーが発生する。
        ```
        {"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.","details":[{"code":"BadRequest","message":"選択された VM サイズ 'Standard_A2_v2' では、ハイパーバイザー世代 '2' をブートできません。これが作成操作だった場合は、イメージのハイパーバイザー世代が、選択された VM サイズのハイパーバイザー世代と一致していることをご確認ください。それが更新操作であった場合は、ハイパーバイザー世代 '2' の VM サイズを選択してください。詳細については、https://aka.ms/azuregen2vm をご覧ください"}]}
        ```
      - 仮想マシンのサイズとOSディスクの種類は考慮して選択する必要がある。
``低スペックで作成するのは以下の理由から非推奨``
        - デプロイの際にAVD用にVMがセットアップされる関係だと考えられるが、デプロイ処理にかなり時間がかかる。（画像の設定で約18分程度かかった）
        - デプロイ時間が20分を超えるとAzureの仕様でタイムアウトして**デプロイに失敗する**ので、ある程度処理速度の速いものを選択した方が良い。
        - 今回は上記画像通りのスペックで作成した。
   :::  
    - 仮想マシン(2)
  ![create_AVD_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/ee2de237-7066-a114-750d-bff1e21352a7.png)
     - 「仮想マシンの管理者アカウント」は任意の値を設定する。AADのアカウントと一致させる必要はない。
   :::note warn
   ・参加するドメインは Azure Active Directory を選択
   ・「**Intune に VM を登録する**」を「はい」にするとホストプールに以下のエラーが発生したため、「**いいえ**」を選択することで解消した。
   :::
    ![error_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/9fd565f6-ab1e-4847-f8fc-b991b0935b5f.png)
    - ワークスペース
  ![create_AVD_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/e6c878a0-b7cc-dab2-3bd1-03464997a921.png)

1. 詳細・タグは設定不要、**「作成」をクリック** してデプロイを開始する。

### アプリケーショングループへユーザを割り当てる
1. Azureポータルから ``アプリケーショングループ ＞ 今回作成したアプリケーショングループ`` を開く
1. 「割り当て」ブレードを開いて「＋追加」をクリックし、自身のAzureアカウントを指定して「選択」をクリック
![create_SVoC_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/10043000-7280-0308-f7ac-20786cb99467.png)


- ここまでの手順が完了するとAVDを使用したVMへの接続が可能になる

## Start VM on Connect の構築
### アプリケーションにロールを追加
1. Azureポータルから ``サブスクリプション ＞ ホストプール作成に使用したサブスクリプション`` を開く
1. 「アクセス制御(IAM)」ブレードから ``＋追加 ＞ ロール割り当ての追加`` をクリック
![create_SVoC_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/c9930369-c482-c6e9-6a09-0346985bd5ae.png)
1. 「ロール」タブで「Desktop Virtualization Power On Contributor」を選択
![create_SVoC_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/ecb91a69-e2f1-83a9-2929-7e7a9b4c26c2.png)
1. 「メンバー」タブへ移り、「アクセスの割り当て先」に「ユーザ、グループ、またはサービスプリンシパル」を選択
1. 「＋ メンバーを選択する」をクリックし、「Azure Virtual Desktop」を指定して「選択」をクリック
![create_SVoC_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/1a4798e2-1138-4a7d-e277-f8445ebb3f86.png)
1. 「レビューと割り当て」タブへ移り、設定内容を確認。問題なければ「レビューと割り当て」をクリック
![create_SVoC_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/5380b989-0006-20e7-7a1f-7e900c77b7a6.png)


### Start VM on Connectを有効化
1. Azureポータルから ``ホストプール ＞ 今回作成したホストグループ`` を開く
1. 「プロパティ」ブレードを開き、「接続時に VM を起動する」で「はい」を選択し「保存」をクリック
![create_SVoC_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/f09b91ec-e8a1-abbe-41ba-fcc3215cd22b.png)

# 動作確認
1. 接続するVMが停止状態であることを確認
![AVD_接続00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/d66d90aa-70ec-5f00-9fde-6e2f49b406d7.png)
1. ブラウザから接続用URLへアクセスして、自身で設定したワークスペースと選択可能なマシンがあることを確認（接続用URL一覧は[こちら](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-web#access-your-resources)）
![AVD_接続01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/c27bd1b7-bbbe-bcfb-cd4f-d8821527cf9e.png)  
　※ 初回アクセス時にはAAD認証を求められるため、自身のAzureアカウントでログインする。
1. マシンのアイコンをクリックすると以下の画面が表示され、VMが起動される
![AVD_接続05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/9a7cadda-5a66-5269-0919-73b3b7a97761.png)
1. 起動後、自身で設定した仮想マシンの管理者アカウント情報を入力する
![AVD_接続03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/0468f9f8-e4de-c3c9-784f-350548ae3719.png)
1. VMへログイン完了
![AVD_接続04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982582/3c20fcf6-7dd2-d7e8-b63b-824049aac8b5.png)

# おわりに
本記事をご覧いただきありがとうございました。

Advent Calenderという機会をいただき、初めて記事を執筆してみました。
簡単な構成ではありますが、初めて使用するサービスの構築を一から調査していく経験を積むことができて感謝しております。
エンジニアとして、これから情報を発信していく足掛かりにしていきたいと思います。

さて、明日は@ttttfx702pさんがDBに関連する記事を書いてくださるそうです。
ぜひそちらもご覧になってください。
　

# 参考文献
- [Azure Virtual Desktop とは](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/overview)
- [Start VM on Connect を設定する](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/start-virtual-machine-connect?tabs=azure-portal)