Use valid VM names#
Operational Excellence · Virtual Machine · Rule · 2020_06 · Awareness
Virtual Machine (VM) names should meet naming requirements.
Description#
When naming Azure resources, resource names must meet service requirements. The requirements for VM names are:
- Between 1 and 64 characters long.
- Alphanumerics, underscores, periods, and hyphens.
- Start with alphanumeric.
- End alphanumeric or underscore.
- VM names must be unique within a resource group.
Recommendation#
Consider using names that meet VM resource name requirements. Additionally, consider using a resource name that meeting OS naming requirements.
Examples#
Configure with Bicep#
To deploy virtual machines (VMs) that pass this rule:
- Set the
name
property to a string that matches the naming requirements. - Optionally, consider constraining name parameters with
minLength
andmaxLength
attributes.
For example:
@minLength(1)
@maxLength(15)
@description('The name of the resource.')
param name string
@description('The location resources will be deployed.')
param location string = resourceGroup().location
@secure()
@description('The name of the local administrator account.')
param adminUsername string
@secure()
@description('A password for the local administrator account.')
param adminPassword string
@description('The VM sku to use.')
param sku string
resource vm 'Microsoft.Compute/virtualMachines@2024-11-01' = {
name: name
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
hardwareProfile: {
vmSize: 'Standard_D2s_v3'
}
osProfile: {
computerName: name
adminUsername: adminUsername
adminPassword: adminPassword
windowsConfiguration: {
provisionVMAgent: true
}
}
securityProfile: {
securityType: 'TrustedLaunch'
encryptionAtHost: true
uefiSettings: {
secureBootEnabled: true
vTpmEnabled: true
}
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: sku
version: 'latest'
}
osDisk: {
name: '${name}-disk0'
caching: 'ReadWrite'
createOption: 'FromImage'
managedDisk: {
storageAccountType: 'Premium_LRS'
}
}
dataDisks: [
{
createOption: 'Attach'
lun: 0
managedDisk: {
id: dataDisk.id
}
}
]
}
networkProfile: {
networkInterfaces: [
{
id: nic.id
}
]
}
}
zones: [
'1'
]
}
Configure with Azure Verified Modules
A pre-validated module supported by Microsoft is available from the Azure Bicep public registry. To reference the module, please use the following syntax:
To use the latest version:
Configure with Azure template#
To deploy virtual machines (VMs) that pass this rule:
- Set the
name
property to a string that matches the naming requirements. - Optionally, consider constraining name parameters with
minLength
andmaxLength
attributes.
For example:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.34.44.8038",
"templateHash": "18140604143517495412"
}
},
"parameters": {
"name": {
"type": "string",
"metadata": {
"description": "The name of the resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location resources will be deployed."
}
},
"adminUsername": {
"type": "securestring",
"metadata": {
"description": "The name of the local administrator account."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "A password for the local administrator account."
}
},
"sku": {
"type": "string",
"metadata": {
"description": "The VM sku to use."
}
}
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-11-01",
"name": "[parameters('name')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"hardwareProfile": {
"vmSize": "Standard_D2s_v3"
},
"osProfile": {
"computerName": "[parameters('name')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"windowsConfiguration": {
"provisionVMAgent": true
}
},
"securityProfile": {
"securityType": "TrustedLaunch",
"encryptionAtHost": true,
"uefiSettings": {
"secureBootEnabled": true,
"vTpmEnabled": true
}
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "[parameters('sku')]",
"version": "latest"
},
"osDisk": {
"name": "[format('{0}-disk0', parameters('name'))]",
"caching": "ReadWrite",
"createOption": "FromImage",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
},
"dataDisks": [
{
"createOption": "Attach",
"lun": 0,
"managedDisk": {
"id": "[resourceId('Microsoft.Compute/disks', parameters('name'))]"
}
}
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('nicName'))]"
}
]
}
},
"zones": [
"1"
],
"dependsOn": [
"[resourceId('Microsoft.Compute/disks', parameters('name'))]",
"[resourceId('Microsoft.Network/networkInterfaces', parameters('nicName'))]"
]
}
]
}
Notes#
This rule does not check if VM names are unique.
Additionally, VM computer names have additional restrictions.
See Azure.VM.ComputerName
for details.
Links#
- OE:04 Continuous integration
- Naming rules and restrictions for Azure resources
- Azure deployment reference