Windows Virtual DesktopのARMテンプレート内のセッションホストの命名規則を変更したい

このエントリは2020/05/27現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

先日、以下のような質問を受けた。

Windows Virtual Desktop(以下、WVD)のARMテンプレートが出来たけど、このセッションホスト名に付ける連番を0からではなく、1000から開始したい。そして、数値部分の桁数を5桁にしたい。

WVDセッションホストを作成するARMテンプレートは以下のリポジトリのwvd-templatesにある。今回の対象はCreate and provision WVD host poolにあるARMテンプレート。

ARM Templates for Remote Desktop Services deployments
https://github.com/Azure/RDS-Templates

このテンプレートのREADME.mdにあるDeploy to Azureをクリックすると、Azure Portalが開くので、パラメータを指定すれば、セッションホストの作成やドメインへの登録、ホストプールの作成、登録までできる。

今回の質問は、Create and provision WVD host poolにあるARMテンプレートの命名規則をカスタマイズしたいが、どうすればよいか、というもの。このテンプレートのデフォルト命名規則は以下の通り。

デフォルト設定カスタマイズポイント
連番0からスタート任意の番号からスタート(今回の場合は1000)
桁数考慮なし指定桁数までゼロサプレス(今回は5桁)

PREFIXがSH-の場合
SH-0
SH-1

SH-98
SH-99
SH-01000
SH-01001

SH-01098
SH-01099

というわけで、手を入れるべき箇所を以下に挙げておく。着目ポイントはcopyIndexとpadLeftという関数。

copyIndex
https://docs.microsoft.com/azure/azure-resource-manager/templates/template-functions-numeric#copyindex
padLeft
https://docs.microsoft.com/azure/azure-resource-manager/templates/template-functions-string#padleft

README.md

README.mdのDeploy to Azureアイコンをクリックして先ほどのARMテンプレートを使ってリソースを作成するためには、README.md内のURLを、修正したARMテンプレートに向ける必要がある。今回の場合、3行目ならびに6行目の<a>タグに割り当てているURLを変更しなければならない。 3行目は https://portal.azure.com/#create/Microsoft.Template/uri/ 以下に、6行目は http://armviz.io/#/?load= 以下に、それぞれURLエンコードしたARMテンプレートのURLを指定する必要がある。

mainTemplate.json

カウンタの生成 (285行目)

文字列連結してホスト名を作成し、カウンタを作成している。5桁の連番かつ1000からスタート(例:01000、01001…)するなら、以下のように変更する必要がある。基本的に他の箇所も類似の修正を実施する。

オリジナル修正後
285concat(variables(‘rdshPrefix’), copyIndex(‘rdshVmNamesCopy’))concat(variables(‘rdshPrefix’), padLeft(copyIndex(‘rdshVmNamesCopy’, 1000), 5, ‘0’))

NIC (437行目)

オリジナル修正後
437concat(variables(‘rdshPrefix’), copyindex(), ‘-nic’)concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘-nic’)

VMリソース名 (464行目、475行目)

オリジナル修正後
464concat(variables(‘rdshPrefix’), copyindex())concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′))
475concat(‘Microsoft.Network/networkInterfaces/’, variables(‘rdshPrefix’), copyindex(), ‘-nic’)concat(‘Microsoft.Network/networkInterfaces/’, variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘-nic’)

OS profile (483行目)

オリジナル修正後
483concat(variables(‘rdshPrefix’), copyindex())concat(variables(‘rdshPrefix’), padLeft(copyIndex(1000),5,’0′))

Network Profile (499行目)

オリジナル修正後
499resourceId(‘Microsoft.Network/networkInterfaces’, concat(variables(‘rdshPrefix’), copyindex(), ‘-nic’))resourceId(‘Microsoft.Network/networkInterfaces’, concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘-nic’))

Microsoft.Compute/virtualMachines/extensions (514、517行目)

オリジナル修正後
514concat(variables(‘rdshPrefix’), copyindex(), ‘/joindomain’)concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘/joindomain’)
517concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), copyindex())concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′))

ホストプールの作成とセッションホストの登録 (548行目)

ここはハードコーディングされているので、そのまま01000をハードコーディングしてもいいが、関数を使っておくと、後々パラメータとしてオフセットや桁数を指定できるようにしたときに(例えばオフセットなら1000という数値で検索すればいいので)修正が楽。。

オリジナル修正後
548concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), ‘0/extensions/joindomain’)concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), padLeft(copyIndex(1000),5,’0′), ‘/extensions/joindomain’)

ホストプールへのセッションホストの登録 (592、598行目)

最初のセッションホストのホストプールへの登録の前にホストプールを作成しているので、ここでは2番目のセッションホスト以後の登録のみ。そのため、オリジナルではループカウンタの個数が1個少なく、かつオフセットとして1が指定されている。修正にあたっては、オフセットを1000 + 1にする必要がある。

また、598行目では、作成するセッションホスト数が複数である場合にオフセットを1にするよう指定されているので、ここを1001にするように修正する必要がある。

オリジナル修正後
592concat(variables(‘rdshPrefix’), copyindex(1), ‘/dscextension’)concat(variables(‘rdshPrefix’), padLeft(copyIndex(add(1000, 1)), 5, ‘0’), ‘/dscextension’)
598concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), copyindex(if(greater(parameters(‘rdshNumberOfInstances’), 1), 1, 0)), ‘/extensions/joindomain’)concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), padLeft(copyindex(if(greater(parameters(‘rdshNumberOfInstances’), 1), add(1000,1), 0)), 5, ‘0’), ‘/extensions/joindomain’)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中