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

本文介绍了如何修改最小可行规模集模板,以便通过自定义映像进行部署。

更改模板定义

可在此处查看最小可行规模集模板,可在此处查看用于从自定义映像部署规模集的模板。 让我们逐一查看创建此模板 (git diff minimum-viable-scale-set custom-image) 时使用的差异内容:

创建托管磁盘映像

如果已有自定义的托管磁盘映像(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": "2016-04-30-preview",
+      "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": "2016-04-30-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": {
-              "publisher": "Canonical",
-              "offer": "UbuntuServer",
-              "sku": "16.04-LTS",
-              "version": "latest"
+              "id": "[resourceId('Microsoft.Compute/images', 'myCustomImage')]"
             }
           },
           "osProfile": {

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

后续步骤

可以按照 Azure Resource Manager 文档部署上述模板。

若要阅读这一系列的教程,可先阅读最小可行规模集模板文章

你可以了解如何修改最小可行规模集模板,以便将规模集部署到现有的虚拟网络

可以了解如何修改最小可行规模集模板,并使用自定义映像部署规模集

有关规模集的更多常规信息,请参阅规模集概述页