Consider two scenarios of working with virtual machines in Windows Azure, which will help save money and time:
- We delete virtual machines (but leave the VHD) when they are not in use - Windows Azure withdraws money for virtual machines regardless of its state (running or stopped). The problem is relevant in cases where you use machines for testing or development (for example, if you are developing on the SharePoint platform);
- Change network settings - if you need to change the cloud service settings or network settings.
To solve these problems, we will use PowerShell cmdlets for Windows Azure.
Preliminary actions
We imply that you already have an account in Windows Azure.
Download and install PowerShell cmdlets for Windows on the
official site .
Now you need to get a file with settings for publishing and subscription information. To do this, start Windows Azure PowerShell and execute:
Get-AzurePublishSettingsFile
As a result, the page
https://windows.azure.com/download/publishprofile.aspx opens and save the file.
Next, do:
Import-AzurePublishSettingsFile <mysettings>. publishsettings
Then the file with the subscription data can be deleted.
We export and delete the virtual machine.
To export the virtual machine settings to an XML file, use the
Export-AzureVM cmdlet :
Export-AzureVM -ServiceName '<CloudService>' -Name '<VmName>' -Path 'c:\VMs\VMstate.xml'
And to remove
Remove-AzureVM :
Remove-AzureVM -ServiceName '<CloudService>' -Name '<VmName>'
However, Remove-AzureVM does not delete the VHD, and all your data is not lost.
When you need to start using a virtual machine, use the previously exported file and
Import-AzureVM cmdlet :
Import-AzureVM -Path 'c:\VMs\VMstate.xml' | New-AzureVM -ServiceName '<CloudService>' -Location '<Location>'
The disadvantage of the above steps is that if you need to export and delete several machines, it will be inconvenient.
Export and delete all virtual machines in the Cloud Service
Get-AzureVM -ServiceName '<CloudService>' | foreach { $path = 'c:\VMs\' + $_.Name + '.xml' Export-AzureVM -ServiceName '<CloudService>' -Name $_.Name -Path $path } Remove-AzureDeployment -ServiceName '<CloudService>' -Slot Production –Force
Importing virtual machines into the existing Cloud Service
$vms = @() Get-ChildItem 'c:\VMs\' | foreach { $path = 'c:\VMs\' + $_ $vms += Import-AzureVM -Path $path } New-AzureVM -ServiceName '<CloudService>' -VMs $vms