向 Azure 规模集模板添加自定义映像

注意

本文档介绍在统一业务流程模式下运行的虚拟机规模集。 建议对新工作负载使用灵活业务流程。 有关详细信息,请参阅 Azure 中虚拟机规模集的业务流程模式

本文介绍如何修改基本规模集模板以通过自定义映像进行部署。

更改模板定义

前面的文章中,我们创建了一个基本规模集模板。 现在,我们将使用前面的模板并对其进行修改,以创建一个模板,该模板通过自定义映像部署规模集。

创建托管磁盘映像

如果已有自定义托管磁盘映像(类型为 Microsoft.Compute/images 的资源),可跳过此部分。

首先添加 sourceImageVhdUri 参数,它是 Azure 存储中通用 Blob 的 URI,包含要从其部署的自定义映像。

     },
     "adminPassword": {
       "type": "securestring"
+    },
+    "sourceImageVhdUri": {
+      "type": "string",
+      "metadata": {
+        "description": "The source of the generalized blob containing the custom image"
+      }
     }
   },
   "variables": {},

接下来,添加类型为 Microsoft.Compute/images 的资源,该资源是托管磁盘映像,基于 URI sourceImageVhdUri 处的通用 Blob。 该映像必须与使用它的规模集位于同一区域。 在映像属性中,指定操作系统类型、Blob 位置(通过 sourceImageVhdUri 参数)和存储帐户类型:

   "resources": [
     {
+      "type": "Microsoft.Compute/images",
+      "apiVersion": "2019-03-01",
+      "name": "myCustomImage",
+      "location": "[resourceGroup().location]",
+      "properties": {
+        "storageProfile": {
+          "osDisk": {
+            "osType": "Linux",
+            "osState": "Generalized",
+            "blobUri": "[parameters('sourceImageVhdUri')]",
+            "storageAccountType": "Standard_LRS"
+          }
+        }
+      }
+    },
+    {
       "type": "Microsoft.Network/virtualNetworks",
       "name": "myVnet",
       "location": "[resourceGroup().location]",

在规模集资源中,添加引用自定义映像的 dependsOn 子句,确保在规模集尝试从该映像部署之前创建映像:

       "location": "[resourceGroup().location]",
       "apiVersion": "2019-03-01-preview",
       "dependsOn": [
-        "Microsoft.Network/virtualNetworks/myVnet"
+        "Microsoft.Network/virtualNetworks/myVnet",
+        "Microsoft.Compute/images/myCustomImage"
       ],
       "sku": {
         "name": "Standard_A1",

更改规模集属性以使用托管磁盘映像

在规模集 storageProfileimageReference 中,请勿指定平台映像的发布者、产品/服务、SKU 和版本,而是指定 Microsoft.Compute/images 资源的 id

  "virtualMachineProfile": {
    "storageProfile": {
      "imageReference": {
        "id": "[resourceId('Microsoft.Compute/images', omImage')]"
      }
    },
    "osProfile": {
      ...
    }
  }

本示例中,使用 resourceId 函数获取在同一模板中创建的映像的资源 ID。 如果事先创建了托管磁盘映像,应改为提供该映像的 ID。 此 ID 必须采用以下格式:/subscriptions/<subscription-id>resourceGroups/<resource-group-name>/providers/Microsoft.Compute/images/<image-name>

后续步骤

可以按照 Azure 资源管理器文档部署上述模板。

若要学习这一系列教程,可先阅读基本规模集模板文章

可以了解如何修改基本规模集模板,以便将规模集部署到现有虚拟网络

可以了解如何修改基本规模集模板,以便使用自定义映像部署规模集

可以了解如何修改基本规模集模板,以便使用基于来宾的自动缩放部署 Linux 规模集

有关规模集的详细信息,请参阅规模集概述页