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

适用于:✔️ Linux VM ✔️ 灵活规模集

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

  • 创建 Azure Compute Gallery(以前称为共享映像库)
  • 创建映像定义
  • 创建映像版本
  • 从映像创建 VM
  • 共享库

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

注意

在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

概述

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

使用 Azure Compute Gallery,你可以与他人共享自定义 VM 映像。 选择要共享哪些映像,要使其在哪些区域中可用,以及希望与谁共享它们。

Azure Compute Gallery 功能具有多种资源类型:

资源 说明
映像源 这是可用于在库中创建“映像版本”的资源。 映像源可以是现有的 Azure VM(通用或专用)、托管映像、快照或其他库中的映像版本。
与 Azure 市场一样,是用于管理及共享映像和 VM 应用程序的存储库,但你可以控制谁有权访问该库。
映像定义 映像定义在库中创建,携带有关该映像以及在内部使用该映像的要求的信息。 这包括了该映像是 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 sig image-version create 从 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 在高级存储中存储映像,或者通过添加 --storage-account-type standard_zrs区域冗余存储中存储映像。

创建 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 myVM2 \
    --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 为用户授予对 Azure Compute Gallery 的访问权限。 请将 <email-address><gallery iD> 替换为自己的信息。

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

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

Azure 映像生成器

Azure 还提供一个基于 Packer 的服务:Azure VM 映像生成器。 在模板中描述你的自定义设置,然后该模板将处理映像的创建。

后续步骤

在本教程中,已创建自定义 VM 映像。 你已了解如何:

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

请转到下一教程,了解虚拟机规模集。