I was working on creating generalized VM images for use with scale sets and auto-scaling and I found it rather painful to get the complete set of examples for:
- De-provision user/etc from VM.
- Use Azure Powershell with a Service principal.
- Generalize the VM and create an image.
So, here’s a short mostly-code post on how to do that.
Fair warning… as far as I know, you can’t use the VM after doing this… but you can create a new copy of it from the image, so that doesn’t matter much.
Before getting to Powershell, run this in your VM to de-provision the most recently set up user account (e.g. I’ll install everything on user “john” created with the Azure VM). This will remove that user.
sudo waagent -deprovision+user
Now, just run the below command after setting your own values for the 5 variables up top. This will log in to the RM with the credentials you provide in the pop-up, and then it will stop and generalize the VM, adn tehn create an image from it and store that image in the same resource group as the VM.
$vmName = "YOUR_VM_NAME" $rgName = "YOUR_RG_NAME" $location = "YOUR_REGION" $imageName = "YOUR_IMAGE_NAME" $tenant = "YOUR_TENANT_ID" $c = Get-Credential # Input your service principal client-id/secret. Connect-AzureRmAccount -Credential $c -ServicePrincipal -Tenant $tenant Stop-AzureRmVM -ResourceGroupName $rgName -Name $vmName -Force Set-AzureRmVm -ResourceGroupName $rgName -Name $vmName -Generalized $vm = Get-AzureRmVM -Name $vmName -ResourceGroupName $rgName $image = New-AzureRmImageConfig -Location $location -SourceVirtualMachineId $vm.Id New-AzureRmImage -Image $image -ImageName $imageName -ResourceGroupName $rgName
- If you’re not sure what a service account / principal is or how to create one, the process is quite involved and I highly recommend following one of the many Microsoft-provided tutorials.
- You can find your tenant ID by clicking the directory + subscription button at the top of the portal OR by hovering over your name/info at the top right corner.
- The region strings can be tricky; but just Google the Microsoft site if you’re not sure. A US East 2 example is “EastUS2”.
Your VM image can now be found in that resource group – go to the portal and see. You can go into the image in the portal and create a new VM from it, or you can use it to boot up a scale set, etc.