サクッと検証用Azure Virtual Desktopを構築

MicrosoftのAzure Virtual Desktop (AVD, 旧称Windows Virtual Desktop (WVD))の検証用環境をサクッと作ってみるためのステップバイステップ情報です。まずは短時間でベースの環境を作ってみて、それを実際に触りながら構造を理解したり、必要な要件を実現する方法を探っていくという流れを想定しています。
Active Directory環境構築でいきなりつまずいたりしないよう単純化しているため、Azureに対するお持ちの権限によっては利用できない方もいらっしゃるかもしれません。また、設定の意味の解説も多くが省かれています。これは設定の意味を書くと長大になるので意図的に手順に絞っているためです。必要に応じて検索エンジンなどでご確認ください。
内容は、2020年12月27日現在のものです。

> ほぼ全自動でAVDの環境を新規に作成する場合は、別記事の[Azure Virtual Desktop (AVD) クイックスタート](https://qiita.com/takeokams/items/26732ec60690f432b50d)もありますので、ご参照ください。
また、テレワーク環境にAVDを使う際の構築パターンも、別記事「[テレワーク用にWindows Virtual Desktop環境を構築する](https://qiita.com/takeokams/items/e65cdb9a6d65d5148b24)」を書きましたので、ご参考になれば。

# 目次
[1. 検証環境構築に当たって](#検証環境構築に当たって)
[2. Azure環境準備](#azure環境準備)
[3. マスターイメージの作成](#マスターイメージの作成)
[4. AVD環境構築](#avd環境構築)
[5. 接続テスト](#接続テスト)
[6. ここから](#ここから)

# 検証環境構築に当たって
## Azureサブスクリプション
ここではMicrosoftアカウントに紐づけた[Visual Studioサブスクライバー向けのAzure](https://azure.microsoft.com/ja-jp/pricing/member-offers/credit-for-visual-studio-subscribers/)を使っていますが、[無料トライアル](https://azure.microsoft.com/ja-jp/free/)などでもOKでしょう。
今回、新規にAzure AD Domain Servicesを構築するため、Azure ADに対しては"全体管理者"特権が必要です。Visual Studioや無料トライアルなどでMicrosoftアカウントに紐づけたサブスクリプションをご利用であればこの権限があるはずですが、企業アカウントの場合はこの権限がないかもしれないので、このガイドを進められないかもしれないことには注意が必要です。

## ユーザー
AD管理のためのユーザーを1名、検証用ユーザーを2名用意することにします。
新規に作成する例をここでは取り上げますが、既存であればそちらを使ってもかまいません。

| ユーザー名 | 役割 |
|:-:|:-:|
| mgr | 管理者 |
| hanako | 利用者1 |
| taro | 利用者2 |

## 検証環境全体図
こんな環境を作っていきます。
![WVD Lab System.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/5db68ee1-c5d3-1d7d-a9d4-45570b78c391.png)

# Azure環境準備
## リソースグループ(Resource Group)の作成
Azure Portal ([https://portal.azure.com](https://portal.azure.com))から、リソースグループを作成します。検索する場合は、英語名で行います。
リソースグループ名は、`rg-wvd`とします。
今後、リージョンは東日本が選べるときは`(Asia Pacific) 東日本`を選び、その他ここに記載のしなかったパラメータはデフォルトで進めることとします。
![rg1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f76f742b-6191-f4b0-a808-2efbc8931b56.png)
![rg2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/4c9c2f5a-1137-c004-0976-61e6de3bf4b5.png)
![rg3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f5d0433d-d1af-c8b3-da46-93c4658975ed.png)

## 仮想ネットワーク(Virtual Network)の作成
リソースグループには、今作成した`rg-wvd`を指定して、名前は`vnet-wvd`とします。
![vnet1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/9277a22f-1c3d-c9b2-a165-b0d08f198986.png)
そのほかのパラメータはデフォルトで作成します。
`vnet-wvd`という仮想ネットワークは10.0.0.0/16のIPアドレス空間を持ち、それを分割した`default`という名前の10.0.0.0/24のサブネットが1つ作成されます。
ここではこの`default`、10.0.0.0/24のサブネットを、VM用に利用することにします。

## Azure AD Domain Servicesの作成
AVDの利用には、セッションログイン用に、Azure ADに加えて、ドメインサービスが必要となります。IaaSの上に建てることもできますが、ここでは検証用ということでサービスとして利用できるAzure AD Domain Servicesを使います。
DNSドメイン名には、お持ちのカスタムドメインや、所属のサブドメインを指定できる場合はそれを指定するとよいですが、今回は検証用ということで`contoso.com`を指定します。ここでの目的では問題ありません。
![ADDS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f51c4d29-d6c5-c32a-06eb-cdb8b64f53ad.png)

ネットワークでは、先ほど作成した仮想ネットワーク`vnet-wvd`を選び、サブネットは専用のサブネットを新規作成するため、表示されたままにします。
![ADDS2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/ea503e2a-1c2b-2196-fe27-99927b706c50.png)

今回はAzure ADとすべて同期するままにしています。
なお、ユーザーやグループへの操作は、Azure ADの方で行い、このドメインサービスに一方向で同期する、という形になります。
![ADDS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/d3b1bf7f-4457-630a-48ef-6e1ea5ca43b3.png)

まず、初期デプロイメントが行われ、これに<font color="Red">1時間弱ぐらい</font>かかります。
これが終われば`contoso.com`のAzure AD Domain Servicesのブレードを開いて展開が終わるまで待ちます。東日本リージョンの場合、全体で1時間半ぐらいかかります。
展開が終われば、この仮想ネットワーク内のVMがこのAzure AD Domain Servicesで名前解決できるように、DNSサーバーのアドレスを設定します。なお、この設定には2020年12月27日現在、2つのパターンがありますので、環境によって対応する必要があります。

- ブレードにボタンが出てくる場合
![ADDS4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/0c4fcb07-ec4f-afbf-85f1-5856a4fe9690.png)

- 問題として表示される場合
![ADDS5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/89d26283-69a5-772e-dc52-245cb6ae5b67.png)
![ADDS6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/77d93dd8-f216-a995-8bac-bb514f5a6f05.png)
![ADDS7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/6ac391cd-83fe-c693-0dc9-bdceab3bc7cb.png)

## グループの作成
Azure ADに、AVDを利用できるユーザーのグループを作成します。
![group1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/a8272627-4afb-098d-2795-9daa0f3c0592.png)

`WVD_Users`という名前のセキュリティグループを作成します。
![group2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/30f728e0-ec6d-7212-4ccc-ba329d94800d.png)

## ユーザーの作成
AD DSの管理者を1名、AVDユーザーを2名、作成します。
![user1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/1123b470-6ae2-9777-299a-3570ca415502.png)

下記のユーザーを作成します。

| ユーザー名 | 名前 | グループ |
|:-:|:-:|:-:|
| mgr | AD Manager | AAD DC Administrators |
| hanako | Hanako Micro | WVD_Users |
| taro | Taro Micro | WVD_Users |

この時、初期パスワードを設定しておきます。また、ドメインが`contoso.com`になっていなくても今回は問題ありません。デフォルトで出てくるもののままで結構です。
<font color="Red">このドメイン名はAzureにログインする際に必要となります。</font>
![user2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/ac23f8f7-202a-23b8-1829-9fb4e83fbd35.png)

mgrユーザーの初期パスワードを恒常的なパスワードに変更するため、一度ログインします。
例えばブラウザEdgeを右クリックしてInPrivateウインドウを開き、Azure Portalに作成したmgrアカウントでログインします。
![user3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/e92f56b2-433c-770e-6073-47d2e7a530f8.png)

[Azure Portal](https://portal.azure.com/)を開いて、mgrアカウントでログインし、新しいパスワードを設定します。
ここでログインするアカウントのドメインは、Azure ADのドメイン名で、`contoso.com`ではないことに注意してください。
![user4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/eedd750c-9c01-aa4a-3ea1-6d244db09c6e.png)

## Azure Files (プロファイル保管用ファイルサーバー)の作成
まず、ストレージアカウントを作成します。
ストレージアカウント名はユニークである必要があるので、適当に置き換えてください。
![files1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/a03001ad-654b-c7a6-2d65-d9f39e7042bf.png)

作成したストレージアカウントで、Azure AD DSのユーザーからアクセスできるようにします。
![files2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/50546830-881e-20a6-30b2-6d97e6d2dfa7.png)

ファイル共有を作成します。いったんサイズは500GiBにしています。
![files3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/c51e6bcb-e2ed-f0a9-fe71-9f8d86ad3512.png)

このファイル共有に対して、WVD_Usersグループに所属するユーザーがアクセスできるようにします。
作成した`profile`を開いて、アクセス制御からロールの割り当てを追加します。
![files4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/871f7823-d615-6bbd-8e02-d8c3afabda5e.png)

プロパティを開いて、このファイル共有へのURLをメモしておきます。あとで、プロファイルの場所を指定します。
![files5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/fdd52bb6-710e-1e43-fbff-c4bef6f8cc96.png)

## グループポリシーの設定
### 管理用Windows Server VMの作成
AD DSのポリシー設定をするため、管理用のVMを作成します。
こちらはMicrosoftのドキュメントがありますので、これを参考に作成します。
[Windows Server VM をマネージド ドメインに参加させる](https://aka.ms/aadds-joinvm)
このドキュメントでは新規にサブネットを作成していますが、この通りに行ってもかまいません。もしくは、仮想ネットワークで新規のサブネットを作成せず、VM用のサブネットの中に作成して簡略化することもできます。
また、AD DSにこのVMを参加するときのユーザーアカウントは、`mgr@contoso.com`となります。Azure ADのドメインではないことに注意する必要があります。
![mgr-vm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/2e26aba0-882d-1e62-e78b-f70656071d18.png)

### Group Policy Management機能の追加
管理用のWindows Serverに機能追加します。
![mgr-vm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3d6bd6c0-2f25-0622-7a37-e37dab291782.png)

### FSLogixのポリシー設定
まず、[ここ](https://aka.ms/fslogix_download)にあるファイルをWindows Server内にダウンロードします。
ダウンロードしたZipファイルを展開したら、下記のファイルをコピーします。

| ファイル | コピー先 |
|:--|:--|
| fslogix.admx | C:\Windows\PolicyDefinitions |
| fslogix.adml | C:\Windows\PolicyDefinitions\en-US |

Group Policy Managementを起動して、AADDC Computer GPOを右クリックし、Edit..
![mgr-vm3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/29dca462-25f0-d704-8cc2-e4e1efc1fe64.png)

開いたGroup Policy Management Editorから、下記のようにFSLogixのProfile Containersを開き、下記の設定を行います。

| Setting | Value |
|:--|:--|
| Enabled | On |
| Delete local profile when FSLogix Profile should apply | On |
| VHD Location | <ファイルシェアへのパス>  |

ファイルシェアへのパスは、Azure Filesの項目で作成したファイル共有へのURLをUNCで記述します。
例えば`https://takestorage.file.core.windows.net/profile`であれば、`\\takestorage.file.core.windows.net\profile`となります。

![mgr-vm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3b4b79df-0ab1-841f-702e-95ae13dfa9fd.png)

### タイムゾーンのリダイレクト設定
クライアントのタイムゾーンに仮想デスクトップの時刻を合わせる設定を行います。
[Computer Configuration]、[Policies]、[Administrative Templates]、[Windows Components]、[Remote Desktop Services]、[Remote Desktop Session Host]、[Device and Resource Redirection]、[Allow time zone redirection]を"Enabled"に設定します。
![mgr-vm5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/de6b3bd6-4249-3389-cdc0-6ebc0d256009.png)


# マスターイメージの作成
## イメージ用仮想マシンの作成
セッションホスト用のマスターイメージを作成します。今回は、Windows 10 multi-sessionを利用します。
イメージ作成用で、AVDユーザーが利用するわけではありませんから、VMのサイズなどはあまり気にしなくて構いません。
![host-vm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/1168adbb-b9ab-c4d4-c9ff-a47684c9511d.png)
![host-vm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/a29c55cb-f95b-d063-1b86-00122df5b91c.png)

## FSLogixのインストール
VMの作成が終わり、起動されたら、接続します。
管理用Windows Serverと同様、[ここ](https://aka.ms/fslogix_download)にあるファイルをWindows内にダウンロードします。
ダウンロードしたZipファイルを展開します。
展開した中から、x64\Release\FSLogixAppsSetup.exeを実行して、FSLogixをインストールします。
![host-vm3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/c896c17b-66eb-a9e9-3477-bb62e7182bd2.png)

## イメージの汎用化
SysPrepを、管理者モードのコマンドラインから、下記のように実行します。終われば自動的にシャットダウンされます。

```console
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown
```

## マスターイメージのキャプチャ
イメージを保存するため、仮想マシンのキャプチャを行います。
状態が停止済みであることを確認して、キャプチャを押します。
![host-vm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f2f71413-5323-325a-a5fb-47dac870440d.png)

共有イメージギャラリーにイメージを置かず、キャプチャした後はこのVMを使わなくなりますので、削除してしまいます。
![host-vm5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/ab8bd59a-ec68-aa0f-e58b-affccd735bf6.png)

# AVD環境構築
## ホストプールの作成
Azure Portalの検索バーに"Windows Virtual Desktop"と入力してサービスを開きます。
![pool1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/e5bf1a6c-6bc8-9c24-9691-0ae96bdbd23b.png)

**ホストプールの作成**ボタンを押して、作成していきます。
1つのOSを複数ユーザーで利用するマルチセッションは、プールを選んで、利用するセッション数をここで指定します。検証用として2以上であればよいでしょう。
![pool2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/8e965bc2-c86b-fa9b-b08a-ec0da6b8cf1c.png)

プールの中の仮想マシンは、ここでは2つ作ることにします。何台AVDのVMを並べるか、をここで指定します。
サブネットは、ホスト用のサブネットを指定します。
ドメイン参加のためのUPNは、ここではAD DSの管理者を指定しておきます。
![pool3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/e809cedc-9d7a-761a-d206-b200c6311fd6.png)

イメージは、先ほど作成したマスターイメージをギャラリーから選びます。
![pool4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/a60bf5ef-9f89-f7b3-ef47-821a23cdacc8.png)

ワークスペースは、ここで作成しておきます。
![pool5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/ff60077f-67e4-59d9-0e66-b18032d4de72.png)

ホストプールの作成が終われば、最後に、利用できるユーザーを割り当てます。
作成の際にアプリケーショングループができているので、これを開き、割り当てを選択して、`WVD_Users`を追加します。
![pool6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f3a7bf33-642f-811c-3551-56ab8ba5b052.png)

# 接続テスト
## Webクライアント
クライアントにあるWebブラウザでURLを指定することで接続できます。
下記のURLにアクセスします。AVD ARM版はこのURLになります。
https://rdweb.wvd.microsoft.com/arm/webclient

まず、`hanako`ユーザーでログインします。この時、サインインするユーザー名はAzure ADのドメインを使ってログインしてください。AD DSの`contoso.com`ではありません。
初めてログインすると、パスワードの変更が求められます。
![wvd1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/76a8999d-6b0f-f3d3-df30-eabe8670801b.png)

ログインすると、ログインしたユーザーで利用できるワークスペース、アプリケーショングループが表示されますので、ここでは作成したデスクトップをクリックして接続します。
![wvd2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/6a015227-3bb8-2764-f1ec-05bacc960437.png)

このログインで利用するユーザー名はAD DSのものになりますので、ここでは`hanako@contoso.com`になります。パスワードは同期していますので、先ほど変更したものを入力します。
![wvd3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/299d57b8-e95c-d845-9120-45c7cbcc2c09.png)

ブラウザ内で、`hanako`ユーザーのデスクトップ画面が表示されます。
![wvd4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/9b3bbd41-7412-9d22-9926-c72a94790164.png)

## デスクトップクライアント
Windowsクライアントにソフトウェアをインストールして利用します。
下記のものが用意されていますので、環境に合わせてインストールします。クライアントに管理者権限がなくても大丈夫です。

- [Windows (64 ビット)](https://go.microsoft.com/fwlink/?linkid=2068602)
- [Windows (32 ビット)](https://go.microsoft.com/fwlink/?linkid=2098960)
- [Windows ARM64](https://go.microsoft.com/fwlink/?linkid=2098961)

クライアントをインストールして起動すると、最初は下記の画面になりますので**登録**ボタンを押して進みます。
![wvd5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/1f0d697b-5b7d-9dfe-b19a-abfa9ef57b41.png)

ユーザー認証画面が出ますので、ここでは`taro`ユーザーでログインします。繰り返しですが、Azure ADのユーザー名でログインします。
![wvd6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/bcde0b01-0f13-cbe8-5747-cb5fab42a551.png)

ログインすると下記の画面が出ますが、ここでは検証用なので**いいえ**で進みましょう。
![wvd7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/7ff81daa-7e05-08c7-9680-1d384772aa7e.png)

メインのウインドウに下記のように表示され、利用できるアプリケーショングループが表示されます。
![wvd8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/74becd9e-92c0-b6cb-c26d-4c52c4740a5e.png)

ここで、アイコンをダブルクリックしてデスクトップを開きます。

Azure ADとAzure AD Domain Servicesでユーザーが異なるのでパスワード確認ダイアログが出てきます。ここで、Azure AD Domain Servicesの`taro@contoso.com`でログインします。
![wvd9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/5caace54-5dad-1f8d-e4b4-39a4ecff16bd.png)
![wvd10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/e3c3c0c1-e504-68f7-0abc-08d7c1501ec7.png)

ここまでで、検証用環境構築の解説は終わりです。

# ここから
とりあえず、動くものを作ってからいろいろ勉強したい、試したい、という目的で作った環境ですので、ここからいろいろ触ってみてください。
気になったキーワードで検索すると、より詳細な情報が出てきますので、以下にひとつだけリンクも出しますが、最新情報やより参照されている人気の情報は検索エンジンから探すことをお勧めします。
やっぱり日本語のWindowsが使いたい! Officeもマスターイメージに入れたい! って思ったら、次の記事、[Azure Virtual Desktopで使う日本語UIのWindows 10 + Officeのマスターイメージを作る](https://qiita.com/takeokams/items/4e0753047822b13bbcf7) をご参考ください。
AVDの使い勝手はどうなのか、自社のアプリは動くのか、をさっと試して、導入イメージを得たいときのお役に立てれば幸いです。