Microsoft Windows Virtual Desktop (WVD) パブリックプレビューが始まったよ！その２（デプロイ編）

今回は Windows Virtual Desktop (WVD) 第2段、実際にデプロイをしてみたいと思います。

前回の投稿 [Microsoft Windows Virtual Desktop (WVD) パブリックプレビューが始まったよ！その１（プレビュー申し込み・権限追加編）](https://qiita.com/hideyukimorii/items/3458902c40b75fb3284e) では、パブリックプレビュー申し込みなどの手順をご紹介していますので、本編実施前に実施してください。

#WVD について
前回の記事でも WVD についてはほぼ触れていなかったので、少しご紹介しておきます。

##WVD の特徴
WVD は Microsoft が開発した VDI のクラウドサービスです。従来の VDI は管理プレーンにブローカーや Database、Gateway など多くのサーバーを必要としましたが、この部分を完全なサービスとして提供します。

なかでも特徴は大きく2つあります。
1つは、VDI ライセンスコストです。従来、VDI を使うには各社の VDI 製品のライセンス料がかかっていました。WVD は Microsoft 365 など必要なライセンスをお持ちであれば、Azure の利用料だけで VDI を使えるという画期的なサービスです。管理プレーンの使用料はライセンスに含まれているのです。すでに Microsoft 365 E5 などがあれば、手元の PC にもインストールして使えて、更に WVD でも使えるのです。
2つ目は、Windows 10 でマルチユーザー (マルチセッション) に対応したことです。VDI のコストを下げるために、1台の仮想マシンに複数ユーザーがログインする方法は、Remote Desktop Session Host (RDSH) など Windows Server では従来から対応していました。しかし、アプリケーション(ベンダー) が Windows Server をサポートしないケースがあり、 Windows 10 で 1VM = 1User の VDI を余儀なく選んでいたケースがありました。WVD では Windows 10 (Client OS) でマルチセッションが使えますので、コストメリットがあると言えるでしょう。
![wvdarc.png](https://qiita-image-store.s3.amazonaws.com/0/382084/42549a35-b33a-7baa-a336-fbdcbc801660.png)


##前提条件

* [所定のライセンス](https://qiita.com/hideyukimorii/items/28e08662e56306ce7ff1#%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9)が必要
* Azure AD が必要
* WVD で展開する仮想マシンからアクセスできる場所にドメインコントローラーが必要
    * オンプレミスと ExpressRoute や VPN で接続されていればオンプレミスのドメインコントローラーでも良いですし、Azure 上に仮想マシンとして ドメインコントローラーを構成しても良いですし、[Azure Active Directory Domain Service (AADDS) ](https://azure.microsoft.com/ja-jp/services/active-directory-ds/) でも良いです。

今回の投稿で検証した構成では、AADDS を使っています。

##必要なライセンス
[公式ドキュメント](https://docs.microsoft.com/en-us/azure/virtual-desktop/overview#requirements)を参照してください。
1点、公式ドキュメントの書き方で注意が必要なのは、ライセンスの種類が デバイス単位 (perDevice) なのか ユーザー単位 (perUser) なのか読み取りにくいことです。WVD では **ユーザーライセンスのみが対応** しています。例えば、 Windows 10 E3 PerDevice ライセンスをお持ちであっても、 WVD はご利用いただけません。
* ライセンスの要件の確認については、貴社のマイクロソフト担当営業までご確認ください。


## 今の段階で試せること

* マルチセッションの Windows 10 をデプロイできる
    * お使いのアプリが Windows 10 + マルチセッション環境で稼働するかの試験はできる
* ユーザーの使い勝手を試せる
    * 手元のWindows/macOS/~~スマートフォン/タブレット~~/Linux/Chrome OS からの使い勝手を試せます。※3/26追記：現時点では[モバイルOSを**サポートしない**](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/connect-web)ようです。
    * ただし、現時点で **管理プレーンは Azure US East2 リージョンにしかありません**。 WVD の仕組み上、 **画面転送のトラフィックは管理プレーンにある Gateway を必ず経由します。** そのため、パフォーマンスの試験などは日本からは難しいかもしれません。
    * **管理プレーンの日本への展開の予定は、貴社のマイクロソフト担当営業までご確認ください。**
![wvdarc2.png](https://qiita-image-store.s3.amazonaws.com/0/382084/af924d2a-e845-4c4e-ff8a-8bd52e6b79be.png)
上図の "Windows Virtual Desktop Microsoft-managed Azure services" が WVD の管理プレーンです。画面転送は必ず Gateway を経由しますので、管理プレーンが米国にしかない現状だと、日本のお客様が使うと遅く感じることがあると思います。

##試すのが難しいこと

* 管理インターフェースの使い勝手
    * 正直、完成版にはまだまだかなと思います。初期のデプロイは Azure Portal から実施できますが、ユーザーの追加変更なども [PowerShell](https://docs.microsoft.com/ja-jp/powershell/module/windowsvirtualdesktop/) が必要です。今後、これらも専用の管理インターフェースが提供されると思います。ただし、PowerShell のコマンドは難しくはないですので、検証でお使いいただくには問題ないと思います。
* Windows 7 on WVD
    * Windows 7 を WVD で動かすのはまだ難しそうです。なぜなら、デプロイウィザードで選べる OS Image が Windows 10 Enterprise multi-session か Windows Server 2016 だけだからです。自分で VHD をアップロードすることもできるようになっていますが、Windows 7 に対応した WVD のエージェントが提供されていません。(違ったらすみません。エージェントのダウンロードリンクは[こちら](https://docs.microsoft.com/en-us/azure/virtual-desktop/create-host-pools-powershell#register-the-virtual-machines-to-the-windows-virtual-desktop-host-pool)にありますが、このエージェントが Windows 7 に対応しているかは確認できていません。)

##免責
この記事は個人の見解を示すもので、所属組織の見解を示すものではありません。実施にあたり不具合が生じた場合も責任はとれませんのでご了承ください。正確な情報は公式ドキュメントをご覧いただき、必要な場合にはサポートにお問合せくださるか、WVDはプレビュー期間中ですので [Windows Virtual Desktop Tech Community](https://techcommunity.microsoft.com/t5/Windows-Virtual-Desktop/bd-p/WindowsVirtualDesktop) でフィードバックしてみてください。

# ではデプロイに入ります
今回はデスクトップの配信をやってみます。
[公式ドキュメント](https://docs.microsoft.com/en-us/azure/virtual-desktop/create-host-pools-azure-marketplace) もあわせてご参照ください。
[Azure Portal](https://portal.azure.com) にログインしてください。

##サービスプリンシパルの作成
せっかく Azure Portal を開きましたが、先に PowerShell で必要な情報 (サービスプリンシパル) を準備します。
サービスプリンシパルを一言で言い表すのは難しいのですが、特定の権限だけ付与した専用のアカウントだと思ってください。 WVD デプロイ時にあると便利なのであらかじめ作ります。[公式ドキュメント](https://docs.microsoft.com/en-us/azure/virtual-desktop/create-service-principal-role-powershell)
まずは PowerShell を開きます。

AzureAD Module のインストール。管理者権限で実行してください。

```powershell
Install-Module AzureAD
```

< > を自分の環境に書き換えて実行してください。

```powershell
$myTenantGroupName = "<my-tenant-group-name>"
$myTenantName = "<my-tenant-name>"
```

\<my-tenant-group-name> は指定していなければ Default Tenant Group です。
\<my-tenant-name> は[前の記事](https://qiita.com/hideyukimorii/items/3458902c40b75fb3284e#%E4%BB%8A%E5%BA%A6%E3%81%93%E3%81%9D%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90) で入力している\<TenantName>です。私の場合は MoriiLab です。


Azure AD にサービスプリンシパルを作成します。PowerShell にそのまま貼り付けて実行します。

```powershell
Import-Module AzureAD
$aadContext = Connect-AzureAD
$svcPrincipal = New-AzureADApplication -AvailableToOtherTenants $true -DisplayName "Windows Virtual Desktop Svc Principal"
$svcPrincipalCreds = New-AzureADApplicationPasswordCredential -ObjectId $svcPrincipal.ObjectId
```

作成したサービスプリンシパルに権限を付与します。PowerShell にそのまま貼り付けて実行します。

```powershell
Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com"
Set-RdsContext -TenantGroupName $myTenantGroupName
New-RdsRoleAssignment -RoleDefinitionName "RDS Owner" -ApplicationId $svcPrincipal.AppId -TenantGroupName $myTenantGroupName -TenantName $myTenantName
```
エラーになるようであれば、WVD の PowerShell モジュールがインストールされているか、インポートされているか[確認](https://docs.microsoft.com/ja-jp/powershell/windows-virtual-desktop/overview) してください。


サービスプリンシパルのテスト。PowerShell にそのまま貼り付けて実行します。

```powershell
$creds = New-Object System.Management.Automation.PSCredential($svcPrincipal.AppId, (ConvertTo-SecureString $svcPrincipalCreds.Value -AsPlainText -Force))
Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com" -Credential $creds -ServicePrincipal -AadTenantId $aadContext.TenantId.Guid
```

パスワード、テナントGUID、アプリケーションIDを出力しましょう。パスワードはこのタイミングでしか見えませんので必ず実行して控えておいてください。

```powershell
$svcPrincipalCreds.Value
$aadContext.TenantId.Guid
$svcPrincipal.AppId
```


一連の実行イメージです。
![01_svcprincipal.png](https://qiita-image-store.s3.amazonaws.com/0/382084/789195c1-7dac-158a-ce16-7305b94fe2dd.png)
![01-02.png](https://qiita-image-store.s3.amazonaws.com/0/382084/7029648c-30d3-8d70-516b-d832cb610392.png)


##Azure Portal からデプロイ

#####Marketplace
Azure Portal から Marketplace を開きます。
<img width="464" alt="15_marketplace.png" src="https://qiita-image-store.s3.amazonaws.com/0/382084/788de8c8-9ac3-a6d6-a216-2dc6c0f372d2.png">

#####WVDを検索
Windows Virtual Desktop と検索すると、"Windows Virtual Desktop - Provision a host pool" が出てくるのでクリック。
<img width="570" alt="16_wvdprovhost.png" src="https://qiita-image-store.s3.amazonaws.com/0/382084/dd85453a-9e76-7404-2d36-48c27c8c6f30.png">

#####WVDウィザードの開始
<img width="280" alt="17_wvdcreate.png" src="https://qiita-image-store.s3.amazonaws.com/0/382084/2875502a-012d-112f-65a6-585376653fa9.png">

#####1.基本設定の構成
![02_wiz01.png](https://qiita-image-store.s3.amazonaws.com/0/382084/e74de149-e561-abcd-f885-3860a53d1419.png)

|項目|説明|
|:---|:---|
|Hostpool name | 適当に。|
|Desktop type |Pooled:マルチセッション, Personal:Singleセッション|
|Default desktop users |ログインするユーザーの追加。後からでも [PowerShell](https://docs.microsoft.com/en-us/powershell/module/windowsvirtualdesktop/add-rdsappgroupuser) でできますが、あらかじめ入れれるならここに。カンマ区切りで複数ユーザー追加可。グループで追加は確認していませんが、PowerShell のガイドを見る限りできなさそう。

#####2.仮想マシンのサイズやユーザーの割り当て数の構成
![03_wiz02.png](https://qiita-image-store.s3.amazonaws.com/0/382084/5c9d1f38-271b-5d7f-1c8f-a94d0274cfe4.png)

|項目|説明|
|:---|:---|
|Usage Profile | 1vCPU に割り当てるユーザー数を選びます。Lightは6,Mediumは4,Heavyは2ユーザーです。カスタムも選べます。|
|Total users | ユーザー数を入力します。|
|サイズを変更します| 通常の Azure の VM インスタンスを自由に選べます。既定では D8s v3 が選ばれていました。インスタンスサイズを変えると、ユーザー数に応じてデプロイする台数が自動的に変わるようです。
|prefix |この例だと wvduse2pl3-0,wvduse2pl3-1,wvduse2pl3-2 ...という名前の VM が作成されます。Windows なので全体で 15文字以下になるようにしましょう。 |

#####3.イメージ、ドメインの選択など
![04_wiz03.png](https://qiita-image-store.s3.amazonaws.com/0/382084/9f194d74-4031-1935-24b7-7540547cca83.png)

|項目|説明|
|:---|:---|
|Image source| Windows 10 Enterprise multi-session を選択(Default)|
|Disk Type| SSD を選択(Default)|
|AD domain join UPN |ADに参加できる権限のアカウントを入力|
|Admin password|上記パスワード|
|Domain to join|Contoso.com などの形式でドメイン名を入力|
|(Optional) OU path|デプロイした仮想マシンの所属するOU。ここで指定したOUはあらかじめドメインコントローラー側で定義されていないとこの後のデプロイが失敗します。(自動で作成してくれません)|
|Virtual Network|私の環境では AADDS があるネットワークを選択。(VNet Peering されていたりする場合などがあるので一概には言えませんが、AD サーバーがある VNet や、オンプレの AD を使うなら ExpressRoute/VPN がある VNet を選択。)|
|Subnet|サブネットを選択|

AD が必要なので注意喚起されていますね。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/382084/24ed4467-c4ca-68f3-e3c8-463dd0b6f0e1.png)
ちなみに、どのケースであっても AD の名前解決をできるように、あらかじめ [VNet のカスタム DNS](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-site-to-site-resource-manager-portal#dns)  を設定しておいてください。

#####4.WVDで必要な資格情報などを入力
![06.png](https://qiita-image-store.s3.amazonaws.com/0/382084/d69ea00a-266e-68ac-4e50-f1882b409598.png)

|項目|説明|
|:---|:---|
|Windows Virtual Desktop tenant group name| Default Tenant Group|
|Windows Virtual Desktop tenant name| テナント名|
|Windows Virtual Desktop tenant RDS Owner| Service principal を選択|
|Application ID| Service Principal 作成時にメモしたものを入力|
|Password| Service Principal 作成時にメモしたものを入力|
|Azure AD tenant ID| Service Principal 作成時にメモしたものを入力|

あとはポチポチ押していくとデプロイが始まります。ドキュメントには30分かかることもあると書かれていましたが、私は仮想マシン1台しか展開しなかったので、10分以内に終わりました。
![09.png](https://qiita-image-store.s3.amazonaws.com/0/382084/7f7191b3-584f-bf8e-8469-865f6ab8b902.png)

#####変更などは PowerShell で
[WVD PowerShell](https://docs.microsoft.com/en-us/powershell/module/windowsvirtualdesktop/) をご参照ください。

## 接続
クライアントアプリをインストールして使う方法と、Web Client(HTML5) で使う方法があります。
[クライアントアプリ](https://docs.microsoft.com/en-us/azure/virtual-desktop/connect-windows-7-and-10) はこのページのダウンロードリンクから落としてください。RDP Client ではなく、専用のアプリが必要なのでご注意ください。
Web版は[Windows Virtual Desktop web client](https://rdweb.wvd.microsoft.com/webclient)から接続してください。

ログインIDは user01@contoso.com のように UPN で入力してください。Azure AD Premium などで多要素認証が有効な場合には、それに準じて多要素認証が必要となります。

クライアントアプリの実行例
![07_app.png](https://qiita-image-store.s3.amazonaws.com/0/382084/1446a136-6226-80e6-2d31-c10c42cdd3f1.png)

Web Client の実行例
![08_web.png](https://qiita-image-store.s3.amazonaws.com/0/382084/786b0bad-60d6-d9be-b349-53ebbf2d7b64.png)


とりあえずデプロイするにはこんなところでしょうか。
デフォルトのイメージは日本語化もされていないしタイムゾーンも違いますので、今後の記事でそのあたりを変更してデプロイする手順などをご紹介できればと思います。構成なども今後もう少しご紹介します。

ぜひ皆様もパブリックプレビューをお楽しみください！