在 Azure 规模集模板中引用现有虚拟网络

本文介绍了如何修改基本规模集模板,以便将规模集部署到现有虚拟网络而非创建新的虚拟网络。

必备条件

在前面的文章中,我们创建了一个基本规模集模板。 你将需要使用先前的模板并对其进行修改,以创建用于将规模集部署到现有虚拟网络的模板。

标识子网

首先,添加一个 subnetId 参数。 此字符串将传递到规模集配置,使得规模集能够识别要将虚拟机部署到的预先创建的子网。 此字符串必须采用以下格式:

/subscriptions/<subscription-id>resourceGroups/<resource-group-name>/providers/Microsoft.Network/virtualNetworks/<virtual-network-name>/subnets/<subnet-name>

例如,要将规模集部署到具有名称 myvnet、子网 mysubnet、资源组 myrg 和订阅 00000000-0000-0000-0000-000000000000 的现有虚拟网络,则 subnetId 将是:

/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/mysubnet

      },
      "adminPassword": {
        "type": "securestring"
+    },
+    "subnetId": {
+      "type": "string"
      }
    },

删除额外的虚拟网络资源

接下来,从 resources 阵列中删除虚拟网络资源,由于使用现有虚拟网络,因此不需要部署新的虚拟网络。

    "variables": {},
    "resources": [
-    {
-      "type": "Microsoft.Network/virtualNetworks",
-      "name": "myVnet",
-      "location": "[resourceGroup().location]",
-      "apiVersion": "2018-11-01",
-      "properties": {
-        "addressSpace": {
-          "addressPrefixes": [
-            "10.0.0.0/16"
-          ]
-        },
-        "subnets": [
-          {
-            "name": "mySubnet",
-            "properties": {
-              "addressPrefix": "10.0.0.0/16"
-            }
-          }
-        ]
-      }
-    },

删除从属子句

虚拟网络在部署模板前已存在,因此不需要指定从规模集到虚拟网络的 dependsOn 子句。 删除以下行:

      {
        "type": "Microsoft.Compute/virtualMachineScaleSets",
        "name": "myScaleSet",
        "location": "[resourceGroup().location]",
        "apiVersion": "2019-03-01",
-      "dependsOn": [
-        "Microsoft.Network/virtualNetworks/myVnet"
-      ],
        "sku": {
          "name": "Standard_A1",
          "capacity": 2

传递子网参数

最后,传入用户设置的 subnetId 参数(而非使用 resourceId 获取同一部署中某个 vnet 的 ID,这是基本可行规模集模板执行的操作)。

                        "name": "myIpConfig",
                        "properties": {
                          "subnet": {
-                          "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
+                          "id": "[parameters('subnetId')]"
                          }
                        }
                      }

后续步骤

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

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

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

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

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

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