🌟

簡易的に Azure Virtual Desktop の負荷をかける

2023/06/07に公開

簡易的に Azure Virtual Desktop の負荷をかける

AVD (Azure Virtual Desktop) に対して、負荷テストしたいよね、というのはよく聞く話です。
proprietary ではありますが、有名なものとしては LoginVSI というのがあります。
ただまぁ、お金もかかるし、なんか簡易的に何とかならんかねぇ、と思って試しているのがこの記事です。

URI scheme を使った AVD の利用

参考 docs はこちらです。

https://learn.microsoft.com/azure/virtual-desktop/uri-scheme

端的に言うと、ms-avd:connect?workspaceId=1638e073-63b2-46d8-bd84-ea02ea905467&resourceid=c2f5facc-196f-46af-991e-a90f3252c185&username=user@contoso.com&version=0 みたいなのを実行すると、それで AVD に login できるというものです。
実際にこの URL を例えば「ファイル名を指定して実行」に叩き込むとなんかログイン画面が出てくると思います。
んで、これと Azure AD Join な session host へ SSO できることを利用します。

Workspace ID と Resource ID の取得

まず、次の手順で実行する PowerShell に必要な Workspace ID と Resource ID を探してきます。

Workspace ID に関しては簡単で、PowerShell や Azure CLI でも取得ができますが、Azure Portal 上で JSON View を表示させると見えます。

workspace id
workspace id

で、難しいのが Resource ID で、同様に Azure Portal から表示できる Application group の objectId を利用するとうまくいきません。
指定が必要なのは、Application group の中にある、"Desktop" という個別の application の objectId です。
もし remote app を提供している場合には、notepad.exe や wordpad.exe などのそれぞれに対して objectId がある、ということですね。
こちらの取得には Azure PowerShell の実行が必要です。

(Get-AzWvdDesktop -Name <DesktopName> -ApplicationGroupName <ApplicationGroupName> -ResourceGroupName <ResourceGroupName>).ObjectId

docs にその他詳細が書いてあります。

https://learn.microsoft.com/azure/virtual-desktop/cli-powershell

以上で取得できた 2 つの objectId を次の PowerShell で利用します。

PowerShell での順次 login

準備として、使わないのですが、AVD client を起動しておきます。
起動するだけで、何もしなくて大丈夫です。

そのうえで、以下のような PowerShell を実行します。
workspaceId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxresourceid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx は先程取得したものを入れてください。
内容はサンプルなので適宜変えて利用していただければと思います。

$users = 1..8 | ForEach-Object { "avduser{0:D2}@xxxxxxxx.onmicrosoft.com" -f $_ }

$users | ForEach-Object {
    $url = "ms-avd:connect?workspaceId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&resourceid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&username=$_&version=0"
    Start-Process $url
}

で、この PowerShell での初回実行時には、それぞれの user に対してアカウント情報を入力する dialog が出てくると思うので適切なものを入力してください。
2 回目以降にはこれが省略可能になります。
ということで、一旦アカウント情報がキャッシュされば、これを使って順次 login ができるようになります。

あとは、宛先の session host にて performance counter を見ていただくなりして、負荷を確認していただければと思います。

まとめ

まだ preview ではあるものの、URI scheme を使って AVD へと自動的に login させることで、簡易的な負荷テストにはなったんじゃないかと思います。
subscribe 無しでも AVD にログインが可能など、ちょこちょこっと便利な機能ではあるかと思います。

参考

  • Azure Virtual Desktop 用リモート デスクトップ クライアントでの Uniform Resource Identifier スキーム (プレビュー)

https://learn.microsoft.com/azure/virtual-desktop/uri-scheme![]

  • Azure Virtual Desktop で Azure CLI と Azure PowerShell を使用する

https://learn.microsoft.com/azure/virtual-desktop/cli-powershell

  • Azure AD Join の session host を手作りで追加する

https://zenn.dev/skmkzyk/articles/azure-ad-join-session-host-manually

Start VM on Connect との併用

小ネタとして最後に挟んでおきます。
AVD multi-session でも Start VM on Connect は利用できるのですが、docs に以下のような記載があります。

プールされたホスト プールでは、Start VM on Connect により、最大で 5 分ごとに VM が起動されます。 使用可能なリソースがない間に他のユーザーがこの 5 分間にサインインしようとした場合、Start VM on Connect により新しい VM は起動されません。 代わりに、サインインしようとしているユーザーには、"使用可能なリソースがありません" というエラー メッセージが表示されます。

https://learn.microsoft.com/azure/virtual-desktop/start-virtual-machine-connect

ただ、実際に試してみると、Azure VM が順次起動するのに 5 分待たされるという意味では書いてあるとおりなのですが、ずーっと待っていれば最終的に login は可能でした。
以下の screenshot は Max session limit を 2 とし、6 人分の login を試みたときのものですが、順次 Azure VM が起動するため 10 分以上はかかるものの最終的に 6 人とも login できました。

start vm on connect
start vm on connect

Microsoft (有志)

Discussion