Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
---
title: Use Azure Marketplace image to create VM image for Azure Stack Edge Pro GPU device
description: Describes how to use an Azure Marketplace image to create a VM image to use on your Azure Stack Edge Pro GPU device.
services: databox
author: alkohli
ms.service: azure-stack-edge
ms.custom: devx-track-azurecli
ms.topic: how-to
ms.date: 06/28/2024
ms.author: alkohli
#Customer intent: As an IT admin, I need to understand how to create and upload Azure VM images that I can use with my Azure Stack Edge Pro device so that I can deploy VMs on the device.
---
# Use Azure Marketplace image to create VM image for your Azure Stack Edge Pro GPU
[!INCLUDE [applies-to-GPU-and-pro-r-and-mini-r-skus](../../includes/azure-stack-edge-applies-to-gpu-pro-r-mini-r-sku.md)]
To deploy VMs on your Azure Stack Edge Pro GPU device, you need to create a VM image that you can use to create VMs. This article describes the steps that are required to create a VM image starting from an Azure Marketplace image. You can then use this VM image to deploy VMs on your Azure Stack Edge Pro GPU device.
## VM image workflow
The following steps describe the VM image workflow using an Azure Marketplace workflow:
1. Connect to the Azure Cloud Shell or a client with Azure CLI installed.
2. Search the Azure Marketplace and identify your preferred image.
3. Create a new managed disk from the Marketplace image.
4. Export a VHD from the managed disk to Azure Storage account.
5. Clean up the managed disk.
For more information, go to [Deploy a VM on your Azure Stack Edge Pro device using Azure PowerShell](azure-stack-edge-gpu-deploy-virtual-machine-powershell.md).
## Prerequisites
Before you can use Azure Marketplace images for Azure Stack Edge, make sure you're connected to Azure in either of the following ways.
[!INCLUDE [azure-cli-prepare-your-environment](~/reusable-content/azure-cli/azure-cli-prepare-your-environment-no-header.md)]
## Search for Azure Marketplace images
Identify a specific Azure Marketplace image that you wish to use. Azure Marketplace hosts thousands of VM images.
To find some of the most commonly used Marketplace images that match your search criteria, run the following command.
```azurecli
az vm image list --all [--publisher <Publisher>] [--offer <Offer>] [--sku <SKU>]
```
The last three flags are optional but excluding them returns a long list.
Some example queries are:
```azurecli
#Returns all images of type "Windows Server"
az vm image list --all --publisher "MicrosoftWindowsserver" --offer "WindowsServer"
#Returns all Windows Server 2019 Datacenter images from West US published by Microsoft
az vm image list --all --location "westus" --publisher "MicrosoftWindowsserver" --offer "WindowsServer" --sku "2019-Datacenter"
#Returns all VM images from a publisher
az vm image list --all --publisher "Canonical"
```
Here's an example output when VM images of a certain publisher, offer, and SKU were queried.
```azurecli
PS /home/user> az vm image list --all --publisher "Canonical" --offer "UbuntuServer" --sku "12.04.4-LTS"
```
```output
[
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201402270",
"version": "12.04.201402270"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201404080",
"version": "12.04.201404080"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201404280",
"version": "12.04.201404280"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201405140",
"version": "12.04.201405140"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201406060",
"version": "12.04.201406060"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201406190",
"version": "12.04.201406190"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201407020",
"version": "12.04.201407020"
},
{
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "12.04.4-LTS",
"urn": "Canonical:UbuntuServer:12.04.4-LTS:12.04.201407170",
"version": "12.04.201407170"
}
]
PS /home/user>
```
In this example, we'll select Windows Server 2019 Datacenter Core, version 2019.0.20190410. We'll identify this image by its Universal Resource Number (âURNâ).
:::image type="content" source="media/azure-stack-edge-create-virtual-machine-marketplace-image/marketplace-image-1.png" alt-text="List of marketplace images":::
### Commonly used Marketplace images
Below is a list of URNs for some of the most commonly used images. If you just want the latest version of a particular OS, the version number can be replaced with "latest" in the URN. For example, âMicrosoftWindowsServer:WindowsServer:2019-Datacenter:Latestâ.
| OS | SKU | Version | URN |
|-----------------|-----------------------------------------|-----------------------|-------------------------------------------------------------------------------------------|
| Windows Server | 2019 Datacenter | 17763.1879.2104091832 | MicrosoftWindowsServer:WindowsServer:2019-Datacenter:17763.1879.2104091832 |
| Windows Server | 2019 Datacenter (30-GB small disk) | 17763.1879.2104091832 | MicrosoftWindowsServer:WindowsServer:2019-Datacenter-smalldisk:17763.1879.2104091832 |
| Windows Server | 2019 Datacenter Core | 17763.1879.2104091832 | MicrosoftWindowsServer:WindowsServer:2019-Datacenter-Core:17763.1879.2104091832 |
| Windows Server | 2019 Datacenter Core (30-GB small disk) | 17763.1879.2104091832 | MicrosoftWindowsServer:WindowsServer:2019-Datacenter-Core-smalldisk:17763.1879.2104091832 |
| Windows Desktop | Windows 10 20H2 Pro | 19042.928.2104091209 | MicrosoftWindowsDesktop:Windows-10:20h2-pro:19042.928.2104091209 |
| Ubuntu Server | Canonical Ubuntu Server 18.04 LTS | 18.04.202002180 | Canonical:UbuntuServer:18.04-LTS:18.04.202002180 |
| Ubuntu Server | Canonical Ubuntu Server 16.04 LTS | 16.04.202104160 | Canonical:UbuntuServer:16.04-LTS:16.04.202104160 |
## Create a new managed disk from the Marketplace image
Create an Azure Managed Disk from your chosen Marketplace image.
1. Set some parameters.
```azurecli
$urn = <URN of the Marketplace image> #Example: âMicrosoftWindowsServer:WindowsServer:2019-Datacenter:Latestâ
$diskName = <disk name> #Name for new disk to be created
$diskRG = <resource group> #Resource group that contains the new disk
```
1. Create the disk and generate a SAS access URL.
```azurecli
az disk create -g $diskRG -n $diskName --image-reference $urn
$sas = az disk grant-access --duration-in-seconds 36000 --access-level Read --name $diskName --resource-group $diskRG
$diskAccessSAS = ($sas | ConvertFrom-Json)[0].accessSas
```
Here's an example output:
```output
PS /home/user> $urn = âMicrosoftWindowsServer:WindowsServer:2019-Datacenter:Latestâ
PS /home/user> $diskName = "newmanageddisk1"
PS /home/user> $diskRG = "newrgmd1"
PS /home/user> az disk create -g $diskRG -n $diskName --image-reference $urn
{
"burstingEnabled": null,
"creationData": {
"createOption": "FromImage",
"galleryImageReference": null,
"imageReference": {
"id": "/Subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.1935.2105080716",
"lun": null
},
"logicalSectorSize": null,
"sourceResourceId": null,
"sourceUniqueId": null,
"sourceUri": null,
"storageAccountId": null,
"uploadSizeBytes": null
},
"diskAccessId": null,
"diskIopsReadOnly": null,
"diskIopsReadWrite": 500,
"diskMBpsReadOnly": null,
"diskMBpsReadWrite": 100,
"diskSizeBytes": 136367308800,
"diskSizeGb": 127,
"diskState": "Unattached",
"encryption": {
"diskEncryptionSetId": null,
"type": "EncryptionAtRestWithPlatformKey"
},
"encryptionSettingsCollection": null,
"extendedLocation": null,
"hyperVGeneration": "V1",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/newrgmd1/providers/Microsoft.Compute/disks/NewManagedDisk1",
"location": "eastus",
"managedBy": null,
"managedByExtended": null,
"maxShares": null,
"name": "NewManagedDisk1",
"networkAccessPolicy": "AllowAll",
"osType": "Windows",
"propertyUpdatesInProgress": null,
"provisioningState": "Succeeded",
"purchasePlan": null,
"resourceGroup": "newrgmd1",
"securityProfile": null,
"shareInfo": null,
"sku": {
"name": "Premium_LRS",
"tier": "Premium"
},
"supportsHibernation": null,
"tags": {},
"tier": "P10",
"timeCreated": "2021-06-08T00:39:34.205982+00:00",
"type": "Microsoft.Compute/disks",
"uniqueId": "1a649ad4-3b95-471e-89ef-1d2ed1f51525",
"zones": null
}
PS /home/user> $sas = az disk grant-access --duration-in-seconds 36000 --access-level Read --name $diskName --resource-group $diskRG
PS /home/user> $diskAccessSAS = ($sas | ConvertFrom-Json)[0].accessSas
PS /home/user>
```
## Export a VHD from the managed disk to Azure Storage
This step exports a VHD from the managed disk to your preferred Azure blob storage account. This VHD can then be used to create VM images on Azure Stack Edge.
1. Set the destination storage account where the VHD is copied.
```azurecli
$storageAccountName = <destination storage account name>
$containerName = <destination container name>
$destBlobName = <blobname.vhd> #Blob that will be created, including .vhd extension
$storageAccountKey = <storage account key>
```
1. Copy the VHD to the destination storage account.
```azurecli
$destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
Start-AzureStorageBlobCopy -AbsoluteUri $diskAccessSAS -DestContainer $containerName -DestContext $destContext -DestBlob $destBlobName
```
The VHD copy takes several minutes to complete. Ensure the copy completes before proceeding by running the following command. The status field shows âSuccessâ when complete.
```azurecli
Get-AzureStorageBlobCopyState âContainer $containerName âContext $destContext -Blob $destBlobName
```
Here's an example output:
```output
PS /home/user> $storageAccountName = "edgeazurevmeus"
PS /home/user> $containerName = "azurevmmp"
PS /home/user> $destBlobName = "newblobmp.vhd"
PS /home/user> $storageAccountKey = "n9sCytWLdTBz0F4Sco9SkPGWp6BJBtf7BJBk79msf1PfxJGQdqSfu6TboZWZ10xyZdc4y+Att08cC9B79jB0YA=="
PS /home/user> $destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
PS /home/user> Start-AzureStorageBlobCopy -AbsoluteUri $diskAccessSAS -DestContainer $containerName -DestContext $destContext -DestBlob $destBlobName
AccountName: edgeazurevmeus, ContainerName: azurevmmp
Name BlobType Length ContentType LastModified AccessTier SnapshotTime IsDeleted VersionId
---- -------- ------ ----------- ------------ ---------- ------------ --------- ---------
newblobmp.vhd PageBlob -1 2021-06-08 00:50:10Z False
PS /home/user> Get-AzureStorageBlobCopyState âContainer $containerName âContext $destContext -Blob $destBlobName
CopyId : 24a1e3f5-886a-490d-9dd7-562bb4acff58
CompletionTime :
Status : Pending
Source : https://md-lfn221fppr2c.blob.core.windows.net/d4tb2hp5ff2q/abcd?sv=2018-03-28&sr=b&si=4f588db1-9aac-44d9-9607-35497cc08a7f
BytesCopied : 696254464
TotalBytes : 136367309312
StatusDescription :
DestinationSnapshotTime :
PS /home/user> Get-AzureStorageBlobCopyState âContainer $containerName âContext $destContext -Blob $destBlobName
CopyId : 24a1e3f5-886a-490d-9dd7-562bb4acff58
CompletionTime : 6/8/2021 12:57:26 AM +00:00
Status : Success
Source : https://md-lfn221fppr2c.blob.core.windows.net/d4tb2hp5ff2q/abcd?sv=2018-03-28&sr=b&si=4f588db1-9aac-44d9-9607-35497cc08a7f
BytesCopied : 136367309312
TotalBytes : 136367309312
StatusDescription :
DestinationSnapshotTime :
```
## Clean up the managed disk
To delete the managed disk you created, follow these steps:
```azurecli
az disk revoke-access --name $diskName --resource-group $diskRG
az disk delete --name $diskName --resource-group $diskRG --yes
```
The deletion takes a couple minutes to complete.
## Next steps
[Deploy VMs on your Azure Stack Edge Pro GPU device](azure-stack-edge-gpu-deploy-virtual-machine-portal.md).