你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用专用化映像版本创建 VM

适用于:✔️ Linux VM ✔️ Windows VM

从 Azure Compute Gallery(以前称为共享映像库)中存储的专用化映像版本创建 VM。 若要使用通用映像版本创建 VM,请参阅从通用映像版本创建 VM

本文介绍如何从专用映像创建 VM:

重要

从专用化映像创建新 VM 时,新 VM 会保留原始 VM 的计算机名。 其他特定于计算机的信息(如 CMID)也会保留。 此重复信息可能会导致问题。 复制 VM 时,请注意应用程序依赖哪些类型的计算机特定信息。

从内部库创建 VM。

使用 az sig image-definition list 列出库中的映像定义,以查看定义的名称和 ID。

resourceGroup=myGalleryRG
gallery=myGallery
az sig image-definition list \
   --resource-group $resourceGroup \
   --gallery-name $gallery \
   --query "[].[name, id]" \
   --output tsv

结合 --specialized 参数使用 az vm create 创建 VM 可以指明该映像是专用映像。

使用 --image 的映像定义 ID 从可用的最新映像版本创建 VM。 还可以通过为 --image 提供映像版本 ID 从特定版本创建 VM。

在此示例中,我们将从 myImageDefinition 映像的最新版本创建 VM。

az group create --name myResourceGroup --location eastus
az vm create --resource-group myResourceGroup \
    --name myVM \
    --image "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition" \
    --specialized

RBAC - 在组织内部

如果库所在的订阅位于同一租户中,则通过 RBAC 共享的映像可用于通过 CLI 和 PowerShell 创建 VM。

你需要所要使用的映像的 imageID,并确保映像已复制到你要创建 VM 的区域。


image="/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition"
vmResourceGroup='myResourceGroup'
location='westus'
vmName='myVM'

az group create --name $vmResourceGroup --location $location

az vm create\
   --resource-group $vmResourceGroup \
   --name $vmName \
   --image $image \
   --specialized

RBAC - 来自其他租户或组织

如果你要使用的映像存储在某个不在同一租户(目录)中的库中,则需登录到每个租户以验证你是否拥有访问权限。

你需要所要使用的映像的 imageID,并确保映像已复制到你要创建 VM 的区域。 你还需要用于源库的 tenantID,以及与用于创建 VM 的位置对应的 tenantID

你需要登录到存储映像的租户,获取访问令牌,然后登录到你要在其中创建 VM 的租户。 这是 Azure 验证你是否有权访问映像的方式。

tenant1='<ID for tenant 1>'
tenant2='<ID for tenant 2>'

az account clear
az login --tenant $tenant1
az account get-access-token 
az login --tenant $tenant2
az account get-access-token

结合 --specialized 参数使用 az vm create 创建 VM 可以指明该映像是专用映像。


imageid=""/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition""
resourcegroup="myResourceGroup"
location="West US 3"
name='myVM'

az group create --name $resourcegroup --location $location
az vm create --resource-group $resourcegroup \
    --name $name \
    --image $image \
    --specialized

重要

Microsoft 不为社区库中的映像提供支持。

报告社区映像的问题

使用社区提交的虚拟机映像存在多种风险。 映像可能包含恶意软件、安全漏洞或侵犯某人的知识产权。 为了帮助为社区创建安全可靠的体验,可以在发现这些问题时报告映像。

报告社区图库问题的最简单方法是使用门户,该门户将预先填写报告信息:

  • 对于映像定义字段中的链接或其他信息的问题,请选择“报告社区映像”。
  • 如果映像版本包含恶意代码或特定版本的映像存在其他问题,请选择映像版本表中“报告版本”列下的“报告”。

还可以使用以下链接来报告问题,但系统不会预先填充表单:

若要使用共享到社区库的映像创建 VM,请使用 --image 的映像的唯一 ID,其格式如下:

/CommunityGalleries/<community gallery name, like: ContosoImages-1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f>/Images/<image name>/Versions/latest

作为最终用户,若要获取社区库的公共名称,需要使用门户。 转到“虚拟机”>“创建”>“Azure 虚拟机”>“映像”>“查看所有映像”>“社区映像”>“公共库名称”。

使用 az sig image-definition list-community 列出社区库中可用的所有映像定义。 在此示例中,我们列出美国西部的 ContosoImage 库中的所有映像,以及创建 VM 所需的唯一 ID(按名称)、OS 和 OS 状态。

 az sig image-definition list-community \
   --public-gallery-name "ContosoImages-1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f" \
   --location westus \
   --query [*]."{Name:name,ID:uniqueId,OS:osType,State:osState}" -o table

若要使用社区库中的通用映像创建 VM,请参阅从通用映像版本创建 VM

结合 --specialized 参数使用 az vm create 创建 VM 可以指明该映像是专用映像。

在此示例中,我们将从 myImageDefinition 映像的最新版本创建 VM。

az group create --name myResourceGroup --location eastus
az vm create --resource-group myResourceGroup \
    --name myVM \
    --image "/CommunityGalleries/ContosoImages-f61bb1d9-3c5a-4ad2-99b5-744030225de6/Images/LinuxSpecializedVersions/latest" \
    --specialized

使用社区映像时,系统会提示你接受法律条款。 消息将如下所示:

To create the VM from community gallery image, you must accept the license agreement and privacy statement: http://contoso.com. (If you want to accept the legal terms by default, please use the option '--accept-term' when creating VM/VMSS) (Y/n): 

重要

Azure Compute Gallery - 直接共享库目前处于预览阶段,并受 Azure Compute Gallery 预览条款的约束。

要在预览期间将映像发布到直接共享库,需要在 https://aka.ms/directsharedgallery-preview 注册。 从直接共享库创建 VM 的功能将对所有 Azure 用户开放。

在预览期间,需要新建一个库,并将属性 sharingProfile.permissions 设置为 Groups。 使用 CLI 创建库时,请使用 --permissions groups 参数。 不能使用现有库,当前无法更新该属性。

要使用共享到订阅或租户的映像的最新版本创建 VM,需要以下格式的映像 ID:

/SharedGalleries/<uniqueID>/Images/<image name>/Versions/latest

要查找与你共享的库的 uniqueID,请使用 az sig list-shared。 在本例中,我们探讨的是美国西部区域的库。

region=westus
az sig list-shared --location $region --query "[].name" -o tsv

使用库名称查找所有可用映像。 在此示例中,我们列出美国西部的所有映像,以及创建 VM 所需的唯一 ID(按名称)、OS 和 OS 状态。

galleryName="1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f-myDirectShared"
 az sig image-definition list-shared \
   --gallery-unique-name $galleryName \
   --location $region \
   --query [*]."{Name:name,ID:uniqueId,OS:osType,State:osState}" -o table

请确保映像的状态为 Specialized。 如果要使用 Generalized 状态的映像,请参阅从通用映像版本创建 VM

结合 --specialized 参数使用 az vm create 创建 VM 可以指明该映像是专用映像。

使用 Id(追加有 /Versions/latest 以使用最新版本)作为 `--image`` 的值来创建 VM。

在此示例中,我们将从 myImageDefinition 映像的最新版本创建 VM。

imgDef="/SharedGalleries/1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f-MYDIRECTSHARED/Images/myDirectDefinition/Versions/latest"
vmResourceGroup=myResourceGroup
location=westus
vmName=myVM

az group create --name $vmResourceGroup --location $location

az vm create\
   --resource-group $vmResourceGroup \
   --name $vmName \
   --image $imgDef \
   --specialized

后续步骤