教程:使用 Azure CLI 创建 Azure VM 的自定义映像

自定义映像类似于市场映像,不同的是自定义映像的创建者是自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 OS 配置。 在本教程中,你将创建自己的 Azure 虚拟机自定义映像。 你将学习如何执行以下操作:

  • 创建共享映像库
  • 创建映像定义
  • 创建映像版本
  • 从映像创建 VM
  • 共享映像库

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.4.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

备注

请先运行 az cloud set -n AzureChinaCloud 更改云环境,然后才能在 Azure 中国世纪互联中使用 Azure CLI。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

概述

共享映像库大大简化了整个组织中的自定义映像共享。 自定义映像类似于市场映像,不同的是自定义映像的创建者是自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 OS 配置。

共享映像库可让你与他人共享自定义 VM 映像。 选择要共享哪些映像,要在哪些区域中共享,以及希望与谁共享它们。

共享映像库功能具有多种资源类型:

资源 说明
映像源 这是可用于在映像库中创建“映像版本”的资源。 映像源可以是现有的 Azure VM(可以是通用或专用的)、托管映像、快照或其他映像库中的映像版本。
映像库 与 Azure 市场一样,映像库 是用于管理和共享映像的存储库,但你可以控制谁有权访问这些映像。
映像定义 映像定义在库中创建,携带有关该映像以及在内部使用该映像的要求的信息。 这包括了该映像是 Windows 还是 Linux 映像、发行说明以及最低和最高内存要求。 它是某种映像类型的定义。
映像版本 使用库时,将使用 映像版本 来创建 VM。 可根据环境的需要创建多个映像版本。 与托管映像一样,在使用 映像版本 创建 VM 时,将使用映像版本来创建 VM 的新磁盘。 可以多次使用映像版本。

开始之前

下列步骤详细说明如何将现有 VM 转换为可重用自定义映像,以便将其用于创建新 VM 实例。

若要完成本教程中的示例,必须现有一个虚拟机。 如果需要,可以参阅 CLI 快速入门来创建本教程所用的 VM。 在学习本教程期间,请根据需要替换资源名称。

映像库是用于启用映像共享的主要资源。

允许用于库名称的字符为大写或小写字母、数字、点和句点。 库名称不能包含短划线。 库名称在你的订阅中必须唯一。

使用 az sig create 创建一个映像库。 以下示例在“中国北部”创建一个名为“myGalleryRG”的资源组命名库,以及一个名为“myGallery”的库 。

az group create --name myGalleryRG --location chinanorth
az sig create --resource-group myGalleryRG --gallery-name myGallery

获取有关 VM 的信息

可以使用 az vm list 查看可用 VM 的列表。

az vm list --output table

知道 VM 的名称及其所在的资源组后,使用 az vm get-instance-view 获取 VM 的 ID。

az vm get-instance-view -g MyResourceGroup -n MyVm --query id

复制 VM 的 ID 供稍后使用。

创建映像定义

映像定义为映像创建一个逻辑分组。 它们用于管理有关映像版本的信息,这些版本是在其中创建的。

映像定义名称可能包含大写或小写字母、数字、点、短划线和句点。

若要详细了解可为映像定义指定的值,请参阅映像定义

使用 az sig image-definition create 在库中创建一个映像定义。

在此示例中,映像定义名为 myImageDefinition,适用于专用化 Linux OS 映像。

az sig image-definition create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --publisher myPublisher \
   --offer myOffer \
   --sku mySKU \
   --os-type Linux \
   --os-state specialized

复制输出中的映像定义 ID 供稍后使用。

创建映像版本

使用 az image gallery create-image-version 从 VM 创建映像版本。

允许用于映像版本的字符为数字和句点。 数字必须在 32 位整数范围内。 格式:MajorVersion.MinorVersion.Patch

在此示例中,映像的版本为 1.0.0,并且我们打算使用本地冗余存储在“中国北部”区域创建 2 个副本,在“中国东部区域”创建 1 个副本,在“中国东部 2”区域创建 1 个副本。 复制区域必须包含源 VM 所在的区域。

请将此示例中的 --managed-image 值替换为上一步的 VM ID。

az sig image-version create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --gallery-image-version 1.0.0 \
   --target-regions "chinanorth" "chinaeast=1" "chinaeast2=1=standard_lrs" \
   --replica-count 2 \
   --managed-image "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"

备注

需等待映像版本彻底生成并复制完毕,然后才能使用同一托管映像来创建另一映像版本。

创建映像版本时,还可以通过添加 --storage-account-type premium_lrs 在高级存储中存储映像。

创建 VM

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

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

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

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

可以使用 Azure 基于角色的访问控制 (Azure RBAC) 在订阅之间共享映像。 可以在库、映像定义或映像版本级别共享映像。 任何对映像版本具有读取权限的用户,即使跨订阅,也能够使用映像版本部署 VM。

建议在库级别与其他用户进行共享。 若要获取库的对象 ID,请使用 az sig show

az sig show \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --query id

使用对象 ID 作为范围,并使用电子邮件地址和 az role assignment create 为用户授予对共享映像库的访问权限。 请将 <email-address><gallery iD> 替换为自己的信息。

az role assignment create \
   --role "Reader" \
   --assignee <email address> \
   --scope <gallery ID>

有关如何使用 Azure RBAC 共享资源的详细信息,请参阅使用 Azure CLI 添加或删除 Azure 角色分配

后续步骤

在本教程中,已创建自定义 VM 映像。 你已了解如何执行以下操作:

  • 创建共享映像库
  • 创建映像定义
  • 创建映像版本
  • 从映像创建 VM
  • 共享映像库

请转到下一教程,了解高度可用的虚拟机。