Azure PowerShell: Provisioning Multiple VMs
To create new VMs for use with the Virtual Machines and Virtual Networks preview feature for Azure, you can use the Azure PowerShell Commands available at https://www.windowsazure.com/en-us/downloads/. The specific commands to provision a VM are…
- New-AzureVMConfig - https://msdn.microsoft.com/en-us/library/windowsazure/jj152883.aspx
- Add-AzureProvisioningConfig - https://msdn.microsoft.com/en-us/library/windowsazure/jj152870.aspx
- New-AzureVM - https://msdn.microsoft.com/en-us/library/windowsazure/jj152815.aspx
The examples on how to use this are typically as follows:
C:\PS>New-AzureVMConfig -Name "MyNewVM" -InstanceSize ExtraSmall -ImageName "MyImageName"
| Add-AzureProvisioningConfig -Windows -Password $adminPassword `
| New-AzureVM -ServiceName "MySvc2"
This is fine when deploying creating one Virtual Machine, however this can be slightly unreliable when you need to create multiple VMs in quick succession. I would often see that the VM I created was stopped, and the following error was shown:
“The server encountered an internal error. Please retry the request. The long running operation tracking ID was: [UNIQUEID]”.
To avoid errors, you can use the above commands in a different way to that specified in the examples, creating multiple configs, but only calling New-AzureVM once (passing it an array of configs), as well as giving the deployment a unique name. The example below illustrates this…
$vmConfig = New-AzureVMConfig -Name "MyVMName1" -InstanceSize "Small" -ImageName "MyImage.vhd"
$vmDetails = Add-AzureProvisioningConfig -Windows -Password "password" -VM $vmConfig
$vmConfig2 = New-AzureVMConfig -Name "MyVMName2" -InstanceSize "Small" -ImageName "MyImage.vhd"
$vmDetails2 = Add-AzureProvisioningConfig -Windows -Password "password" -VM $vmConfig2
New-AzureVM -ServiceName "MyService" -VMs @($vmDetails, $vmDetails2) -DeploymentName "MyUniqueDeploymentName"
Note, there is also some documentation of this available at https://msdn.microsoft.com/en-us/library/windowsazure/jj835085.aspx (see the section on “Creating Multiple Virtual Machines”.
Written by Rob Nowik