SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure VM でリソース名と異なるホスト名で展開を行う

leave a comment

Azure のリソース名のルールとして、次のようなドキュメントが公開されています。

Azure Portal から VM を展開した場合、VM のリソース名が展開後の VM のホスト名として設定されますが、Windows ではコンピューター名の上限が 15 文字となっています。

はい。 コンピューター名は最大 15 文字の長さまで指定できます。 リソースの名前付けの詳細については、名前付け規則と制約事項に関する記事を参照してください。

1-15 (Windows)
1-64 (Linux)
下記の「注意」を参照。

Azure 仮想マシンには、リソース名とホスト名の 2 つの異なる名前があります。 ポータルで仮想マシンを作成すると、両方の名前に同じ値が使用されます。 前の表に記載されている制限事項は、ホスト名に適用されます。 実際のリソース名の最大文字数は 64 文字です。

Windows の場合、15 文字の制限があるため、15 文字を超えるリソース名を設定した場合は 15 文字に省略されてホスト名が設定されます。

名前付け規則を定義する の案として次のような形式が提示されていますが、VM のリソース名でこのルールを適用した場合、15 文字の制限に達する可能性があるのではないでしょうか。

image

展開後に、ホスト名を表示および変更する の方法で変更することもできるのですが、本投稿では展開時に任意のホスト名を設定した状態で展開をしてみます。

リソース名と異なるホスト名で展開

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>'

 

実際に展開されたリソースが以下になります。

image

リソース名としては「vm-sys001-winvm-prod-japaneast-001」となっていますが、実際に展開された仮想マシンでは、「winvm」として展開を行うことができています。

image

Share

Written by Masayuki.Ozawa

5月 15th, 2024 at 6:32 pm

Posted in Azure,Bicep

Tagged with ,

Leave a Reply