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

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

更改模板定义

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

创建托管磁盘映像

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

首先,添加 sourceImageVhdUri 参数,即 Azure 存储中通用 blob 的 URI,Azure 存储包含用于部署的自定义映像。

     },
     "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。 该映像必须与使用它的规模集位于同一区域。 在映像的属性中,指定 OS 类型,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 中,指定 Microsoft.Compute/images 资源的 id,而不是指定平台映像的发布者、优惠、SKU 以及版本:

         "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 文档部署上述模板。

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

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

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

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