使用 ARM 重新部署 VM 规模集时出错

Error when redeploying VM scale set with ARM

我在 ARM 模板中使用带有应用程序网关的 VM 规模集。首先部署工作正常。重新部署模板时,出现错误:"A Backend Address Pool can have at most one VM scale set".

IpConfiguration /subscriptions/.../resourceGroups/.../providers/Microsoft.Compute/virtualMachineScaleSets/.../updateGroups/.../networkInterfaceConfigurations/.../ipConfigurations/... cannot reference Backend Address Pool /subscriptions/.../resourceGroups/.../providers/Microsoft.Network/applicationGateways/.../backendAddressPools/... because it contains another VM scale set. A Backend Address Pool can have atmost one VM scale set. (Code: ApplicationGatewayBackendAddressPoolCanHaveAtMostOneVMScaleSet)

这个问题的根本原因是什么?

澄清:重新部署是指:我想更新现有部署。我不想复制。

'Backend address pool'是(根据Azure Resource Manager Support for Load Balancer

these are IP addresses associated with the virtual machine Network Interface Card (NIC) to which load will be distributed.

您的部署中发生的情况是,您有一个部署试图在两组不同的 VM 上使用相同的后端地址池。

模板中的某处会有一个类似这样的部分

"type": "Microsoft.Network/loadBalancers",
"name": "[variables('loadBalancerName')]",
"location": "[parameters('resourceLocation')]",
"apiVersion": "[variables('networkApi')]",
"dependsOn": [
    "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]"
],
"properties": {
    "backendAddressPools": [
        {
            "name": "[variables('backendAddressPoolsName')]"
        }
    ],

(显然不是有效的 JSON / 模板)

如果您更改第二个模板中的变量 backendAddressPoolsName,这将解决问题。

如果您需要多次部署此模板,您可以通过将变量修改为类似这样的内容来创建一个唯一的名称

"backendAddressPoolsName": "[toLower(concat(parameters('BaseName'), uniqueString(resourceGroup().id)))]",

这将根据资源组 ID 创建一个唯一的字符串。这意味着您可以毫无问题地从同一个模板部署多个资源组。

当您重新部署模板时,您想要更改什么?

对于重新部署,您不需要指定所有 VMSS 属性(例如网络)和相关资源(例如应用程序网关),只需指定 VMSS 的 sku 属性 以及您要专门更改的任何属性。

我联系了 Azure 团队,他们告诉我这是他们方面的一个错误,将在下一个 NRP 版本中修复。

编辑:此错误已解决。