Azure Custom Image VM
Azure Custom Image VM
generalized VM in Azure
A managed image resource can be created from a generalized virtual machine (VM) that
is stored as either a managed disk or an unmanaged disk in a storage account. The
image can then be used to create multiple VMs. For information on how managed
images are billed, see Managed Disks pricing.
Sysprep removes all your personal account and security information, and then prepares
the machine to be used as an image. For information about Sysprep, see Sysprep
overview.
Make sure the server roles running on the machine are supported by Sysprep. For more
information, see Sysprep support for server roles and Unsupported scenarios.
Important
After you have run Sysprep on a VM, that VM is considered generalized and cannot be
restarted. The process of generalizing a VM is not reversible. If you need to keep the
original VM functioning, you should create a copy of the VM and generalize its copy.
Sysprep requires the drives to be fully decrypted. If you have enabled encryption on your
VM, disable encryption before you run Sysprep.
If you plan to run Sysprep before uploading your virtual hard disk (VHD) to Azure for the
first time, make sure you have prepared your VM.
4. In the System Preparation Tool dialog box, select Enter System Out-of-Box
Experience (OOBE) and select the Generalize check box.
7. When Sysprep completes, it shuts down the VM. Do not restart the VM.
1. Go to the Azure portal to manage the VM image. Search for and select Virtual
machines.
3. In the Virtual machine page for the VM, on the upper menu, select Capture.
4. For Name, either accept the pre-populated name or enter a name that you would
like to use for the image.
5. For Resource group, either select Create new and enter a name, or select a
resource group to use from the drop-down list.
6. If you want to delete the source VM after the image has been created,
select Automatically delete this virtual machine after creating the image.
7. If you want the ability to use the image in any availability zone, select On for Zone
resiliency.
After the image is created, you can find it as an Image resource in the list of resources
in the resource group.
Create an image of a VM using PowerShell
Creating an image directly from the VM ensures that the image includes all of the disks
associated with the VM, including the OS disk and any data disks. This example shows
how to create a managed image from a VM that uses managed disks.
Before you begin, make sure that you have the latest version of the Azure PowerShell
module. To find the version, run Get-Module -ListAvailable Az in PowerShell. If you need
to upgrade, see Install Azure PowerShell on Windows with PowerShellGet. If you are
running PowerShell locally, run Connect-AzAccount to create a connection with Azure.
Note
If you would like to store your image in zone-redundant storage, you need to create it in
a region that supports availability zones and include the -ZoneResilient parameter in
the image configuration (New-AzImageConfig command).
$vmName = "myVM"
$rgName = "myResourceGroup"
$location = "EastUS"
$imageName = "myImage"
If you want to create an image of only the OS disk, specify the managed disk ID as the
OS disk:
$diskID = $vm.StorageProfile.OsDisk.ManagedDisk.Id
$rgName = "myResourceGroup"
$location = "EastUS"
$snapshotName = "mySnapshot"
$imageName = "myImage"
To create a managed image from a VM that doesn't use managed disks, you need the
URI of the OS VHD in the storage account, in the following format:
https://mystorageaccount.blob.core.windows.net/vhdcontainer/vhdfilename.vhd. In this
example, the VHD is in mystorageaccount, in a container named vhdcontainer, and the
VHD filename is vhdfilename.vhd.
$vmName = "myVM"
$rgName = "myResourceGroup"
$location = "EastUS"
$imageName = "myImage"
$osVhdUri =
"https://mystorageaccount.blob.core.windows.net/vhdcontainer/vhdfilename.vhd"
New-AzVm `
-ResourceGroupName $rgName `
-Name "myVM" `
-Image $image.Id `
-Location $location `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-SecurityGroupName "myNSG" `
-PublicIpAddressName "myPIP" `
-OpenPorts 3389