Manage a Virtual Machine Scale Set with the Azure CLI
Note
Many of the steps listed in this document apply to Virtual Machine Scale Sets using Uniform Orchestration mode. We recommend using Flexible Orchestration for new workloads. For more information, see Orchesration modes for Virtual Machine Scale Sets in Azure.
Throughout the lifecycle of a Virtual Machine Scale Set, you may need to run one or more management tasks. Additionally, you may want to create scripts that automate various lifecycle-tasks. This article details some of the common Azure CLI commands that let you perform these tasks.
To complete these management tasks, you need the latest Azure CLI. For information, see Install the Azure CLI. If you need to create a Virtual Machine Scale Set, you can create a scale set with the Azure CLI.
View information about a scale set
To view the overall information about a scale set, use az vmss show. The following example gets information about the scale set named myScaleSet in the myResourceGroup resource group. Enter your own names as follows:
az vmss show --resource-group myResourceGroup --name myScaleSet
View VMs in a scale set
To view a list of VM instance in a scale set, use az vmss list-instances. The following example lists all VM instances in the scale set named myScaleSet in the myResourceGroup resource group. Provide your own values for these names:
az vmss list-instances \
--resource-group myResourceGroup \
--name myScaleSet \
--output table
To view additional information about a specific VM instance, add the --instance-id
parameter to az vmss get-instance-view and specify an instance to view. The following example views information about VM instance 0 in the scale set named myScaleSet and the myResourceGroup resource group. Enter your own names as follows:
az vmss get-instance-view \
--resource-group myResourceGroup \
--name myScaleSet \
--instance-id 0
You can also get detailed instanceView information for all instances in one API call, which can help avoid API throttling for large installations. Provide your own values for --resource-group
, --subscription
, and --name
.
az vmss list-instances \
--expand instanceView \
--select instanceView \
--resource-group <resourceGroupName> \
--subscription <subID> \
--name <vmssName>
GET "https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<VMSSName>/virtualMachines?api-version=2019-03-01&%24expand=instanceView"
List connection information for VMs
To connect to the VMs in a scale set, you SSH or RDP to an assigned public IP address and port number. By default, network address translation (NAT) rules are added to the Azure load balancer that forwards remote connection traffic to each VM. To list the address and ports to connect to VM instances in a scale set, use az vmss list-instance-connection-info. The following example lists connection information for VM instances in the scale set named myScaleSet and in the myResourceGroup resource group. Provide your own values for these names:
az vmss list-instance-connection-info \
--resource-group myResourceGroup \
--name myScaleSet
Change the capacity of a scale set
The preceding commands showed information about your scale set and the VM instances. To increase or decrease the number of instances in the scale set, you can change the capacity. The scale set creates or removes the required number of VMs, then configures the VMs to receive application traffic.
To see the number of instances you currently have in a scale set, use az vmss show and query on sku.capacity:
az vmss show \
--resource-group myResourceGroup \
--name myScaleSet \
--query [sku.capacity] \
--output table
You can then manually increase or decrease the number of virtual machines in the scale set with az vmss scale. The following example sets the number of VMs in your scale set to 5:
az vmss scale \
--resource-group myResourceGroup \
--name myScaleSet \
--new-capacity 5
If takes a few minutes to update the capacity of your scale set. If you decrease the capacity of a scale set, the VMs with the highest instance IDs are removed first.
Stop and start VMs in a scale set
To stop one or more VMs in a scale set, use az vmss stop. The --instance-ids
parameter allows you to specify one or more VMs to stop. If you do not specify an instance ID, all VMs in the scale set are stopped. To stop multiple VMs, separate each instance ID with a space.
The following example stops instance 0 in the scale set named myScaleSet and the myResourceGroup resource group. Provide your own values as follows:
az vmss stop --resource-group myResourceGroup --name myScaleSet --instance-ids 0
Stopped VMs remain allocated and continue to incur compute charges. If you instead wish the VMs to be deallocated and only incur storage charges, use az vmss deallocate. To deallocate multiple VMs, separate each instance ID with a space. The following example stops and deallocates instance 0 in the scale set named myScaleSet and the myResourceGroup resource group. Provide your own values as follows:
az vmss deallocate --resource-group myResourceGroup --name myScaleSet --instance-ids 0
Start VMs in a scale set
To start one or more VMs in a scale set, use az vmss start. The --instance-ids
parameter allows you to specify one or more VMs to start. If you do not specify an instance ID, all VMs in the scale set are started. To start multiple VMs, separate each instance ID with a space.
The following example starts instance 0 in the scale set named myScaleSet and the myResourceGroup resource group. Provide your own values as follows:
az vmss start --resource-group myResourceGroup --name myScaleSet --instance-ids 0
Restart VMs in a scale set
To restart one or more VMs in a scale set, use az vmss restart. The --instance-ids
parameter allows you to specify one or more VMs to restart. If you do not specify an instance ID, all VMs in the scale set are restarted. To restart multiple VMs, separate each instance ID with a space.
The following example restarts instance 0 in the scale set named myScaleSet and the myResourceGroup resource group. Provide your own values as follows:
az vmss restart --resource-group myResourceGroup --name myScaleSet --instance-ids 0
Remove VMs from a scale set
To remove one or more VMs in a scale set, use az vmss delete-instances. The --instance-ids
parameter allows you to specify one or more VMs to remove. If you specify * for the instance ID, all VMs in the scale set are removed. To remove multiple VMs, separate each instance ID with a space.
The following example removes instance 0 in the scale set named myScaleSet and the myResourceGroup resource group. Provide your own values as follows:
az vmss delete-instances --resource-group myResourceGroup --name myScaleSet --instance-ids 0
Next steps
Other common tasks for scale sets include how to deploy an application, and upgrade VM instances. You can also use Azure CLI to configure auto-scale rules.