このエントリは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…)するなら、以下のように変更する必要がある。基本的に他の箇所も類似の修正を実施する。
行 | オリジナル | 修正後 |
---|---|---|
285 | concat(variables(‘rdshPrefix’), copyIndex(‘rdshVmNamesCopy’)) | concat(variables(‘rdshPrefix’), padLeft(copyIndex(‘rdshVmNamesCopy’, 1000), 5, ‘0’)) |
NIC (437行目)
行 | オリジナル | 修正後 |
---|---|---|
437 | concat(variables(‘rdshPrefix’), copyindex(), ‘-nic’) | concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘-nic’) |
VMリソース名 (464行目、475行目)
行 | オリジナル | 修正後 |
---|---|---|
464 | concat(variables(‘rdshPrefix’), copyindex()) | concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′)) |
475 | concat(‘Microsoft.Network/networkInterfaces/’, variables(‘rdshPrefix’), copyindex(), ‘-nic’) | concat(‘Microsoft.Network/networkInterfaces/’, variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘-nic’) |
OS profile (483行目)
行 | オリジナル | 修正後 |
---|---|---|
483 | concat(variables(‘rdshPrefix’), copyindex()) | concat(variables(‘rdshPrefix’), padLeft(copyIndex(1000),5,’0′)) |
Network Profile (499行目)
行 | オリジナル | 修正後 |
---|---|---|
499 | resourceId(‘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行目)
行 | オリジナル | 修正後 |
---|---|---|
514 | concat(variables(‘rdshPrefix’), copyindex(), ‘/joindomain’) | concat(variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′), ‘/joindomain’) |
517 | concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), copyindex()) | concat(‘Microsoft.Compute/virtualMachines/’, variables(‘rdshPrefix’), padLeft(copyindex(1000),5,’0′)) |
ホストプールの作成とセッションホストの登録 (548行目)
ここはハードコーディングされているので、そのまま01000をハードコーディングしてもいいが、関数を使っておくと、後々パラメータとしてオフセットや桁数を指定できるようにしたときに(例えばオフセットなら1000という数値で検索すればいいので)修正が楽。。
行 | オリジナル | 修正後 |
---|---|---|
548 | concat(‘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にするように修正する必要がある。
行 | オリジナル | 修正後 |
---|---|---|
592 | concat(variables(‘rdshPrefix’), copyindex(1), ‘/dscextension’) | concat(variables(‘rdshPrefix’), padLeft(copyIndex(add(1000, 1)), 5, ‘0’), ‘/dscextension’) |
598 | concat(‘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’) |