Azure のリソース名のルールとして、次のようなドキュメントが公開されています。
Azure Portal から VM を展開した場合、VM のリソース名が展開後の VM のホスト名として設定されますが、Windows ではコンピューター名の上限が 15 文字となっています。
はい。 コンピューター名は最大 15 文字の長さまで指定できます。 リソースの名前付けの詳細については、名前付け規則と制約事項に関する記事を参照してください。
1-15 (Windows)
1-64 (Linux)
下記の「注意」を参照。Azure 仮想マシンには、リソース名とホスト名の 2 つの異なる名前があります。 ポータルで仮想マシンを作成すると、両方の名前に同じ値が使用されます。 前の表に記載されている制限事項は、ホスト名に適用されます。 実際のリソース名の最大文字数は 64 文字です。
Windows の場合、15 文字の制限があるため、15 文字を超えるリソース名を設定した場合は 15 文字に省略されてホスト名が設定されます。
名前付け規則を定義する の案として次のような形式が提示されていますが、VM のリソース名でこのルールを適用した場合、15 文字の制限に達する可能性があるのではないでしょうか。
展開後に、ホスト名を表示および変更する の方法で変更することもできるのですが、本投稿では展開時に任意のホスト名を設定した状態で展開をしてみます。
リソース名と異なるホスト名で展開
Azure Potal から展開する場合には、リソース名とホスト名を異なる設定できないようですが、ARM テンプレートや Bicep テンプレートで展開をした場合には、リソース名と異なるホスト名を設定することができます。
仮想マシンのホスト名は、OSProfile.ComputerName プロパティ で設定が行われていますが、テンプレート展開を行う際には、任意の値を設定することができます。
Bicep であれば次のようなテンプレートで展開をすることで、リソース名と異なるホスト名を設定した状態となります。
param adminUserName string @secure() param adminPassword string param location string = resourceGroup().location param vmName string = 'winvm' param vnetName string param snetName string param vnetResourceGroup string param systemName string = 'sys001' param env string = 'prod' resource networkInterface 'Microsoft.Network/networkInterfaces@2020-11-01' = { name: 'nic-${systemName}-${vmName}-${env}-${location}-001' location: location properties: { ipConfigurations: [ { name: 'ipc-${systemName}-${vmName}-${env}-${location}-001' properties: { privateIPAllocationMethod: 'Dynamic' subnet: { id: resourceId(vnetResourceGroup, 'Microsoft.Network/virtualNetworks/subnets', vnetName, snetName) } } } ] } } resource windowsVM 'Microsoft.Compute/virtualMachines@2020-12-01' = { name: 'vm-${systemName}-${vmName}-${env}-${location}-001' location: location properties: { hardwareProfile: { vmSize: 'Standard_DS1_v2' } osProfile: { computerName: vmName adminUsername: adminUserName adminPassword: adminPassword } storageProfile: { imageReference: { publisher: 'MicrosoftWindowsServer' offer: 'WindowsServer' sku: '2022-datacenter-azure-edition' version: 'latest' } osDisk: { name: 'osdisk-${systemName}-${vmName}-${env}-${location}-001' caching: 'ReadWrite' createOption: 'FromImage' } } networkProfile: { networkInterfaces: [ { id: networkInterface.id } ] } } }
上記のテンプレートを展開する際には次のようなコマンドを実行します。
az deployment group create -n newVm -g <Resource Group Name> -f newVM.bicep -p ` adminUserName='<User Name>' ` adminPassword='<Password>' ` vnetName='<VNet Name>' ` snetName='<Subnet Name>' ` vnetResourceGroup='<VNet Resource Group>'
実際に展開されたリソースが以下になります。
リソース名としては「vm-sys001-winvm-prod-japaneast-001」となっていますが、実際に展開された仮想マシンでは、「winvm」として展開を行うことができています。