applicationGatewayBackendAddressPools 配置不适用于虚拟机规模集

时间:2021-05-31 14:30:20

标签: azure azure-application-gateway azure-vm-scale-set

我有一个使用 ARM 模板部署的 VMSS。这是 VMSS 资源部分下的 collections.abc 块。

networkProfile

在变量部分,如果我使用 "networkProfile": { "networkInterfaceConfigurations": [ { "name": "[variables('nicName')]", "properties": { "primary": true, "ipConfigurations": [ { "name": "[concat(variables('VMSSName'), '-ipconfig')]", "properties": { "subnet": { "id": "[variables('subnetRef')]" }, "applicationGatewayBackendAddressPools": "[variables('AppGatewayBackendAddressPool')]" } } ] } } ] }, 函数并提供来自参数的值,那么它不会应用 VMSS 中的配置。例如:

resourceId()

我也试过添加 "AppGatewayBackendAddressPool": "[resourceId(parameters('VirtualNetworkResourceGroup'),'Microsoft.Network/applicationGateways/backendAddressPools', parameters('ApplicationGatewayName'), parameters('BackendAddressPool'))]", 但结果是一样的。

parameters('SubscriptionName')

当我像下面这样声明变量时,它会在 "AppGatewayBackendAddressPool": "[resourceId(parameters('SubscriptionName') ,parameters('VirtualNetworkResourceGroup'),'Microsoft.Network/applicationGateways/backendAddressPools', parameters('ApplicationGatewayName'), parameters('BackendAddressPool'))]", -> Networking 中应用 backendAddressPool 配置。

Load Balancing

类似的,我正在使用 "AppGatewayBackendAddressPool": [ { "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/applicationGateways/<applicationGatewayName>/backendAddressPools/<backendAddressPool>" } ], 如下所示,并且工作正常。

subnetRef

我想通过定义单独的 "subnetRef": "[resourceId(parameters('VirtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('VirtualNetworkName'), parameters('SubnetName'))]", 文件来参数化部署,以便我可以将 parameters.json 附加到不同的虚拟机规模集。

3 个答案:

答案 0 :(得分:1)

这就是我通过遵循 Ked Mardemootoo 答案实现的方法。

VMSS 资源 networkProfile 下的 IP 配置部分。

"ipConfigurations": [
  {
      "name": "[concat(variables('VMSSName'), '-ipconfig')]",
      "properties": {
          "subnet": {
              "id": "[variables('subnetRef')]"
          },
          "applicationGatewayBackendAddressPools": [
              { "id": "[concat(parameters('AapplicationGatewayExternalid'), '/backendAddressPools/', parameters('BackendAddressPool'))]" }
          ]
      }
  }
]

模板文件参数:

        "BackendAddressPool": {
            "type": "string",
            "metadata": {
                "description": "Backend pool to host blue/green vmss."
            }
        },
        "AapplicationGatewayExternalid": {
            "type": "string",
            "metadata": {
                "description": "Application Gateway Id."
            }
        }

现在,ARM 模板正在 VMSS 的资源部分下动态调用和引用 applicationGatewayBackendAddressPools 属性。

我在 parameters.json 文件中有这两个参数,我可以在其中根据环境定义值。

        "BackendAddressPool": {
            "value": "<backendPoolName>"
        },
        "AapplicationGatewayExternalid": {
            "value": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/applicationGateways/<ApplicationGatewayName>"
        }

覆盖发布管道变量中的模板变量: overriding template vars

在管道变量中定义 pipeline var

答案 1 :(得分:0)

您的变量/参数调用似乎没有问题,但 applicationGatewayBackendAddressPools 不是 VMSS 和应用程序网关的有效属性。

您可以检查 AKSApplication Gateway 文档。我通过在不同的 parameters.json 文件中设置应用程序网关部分中的 backendAddressPools 来实现相同的目标。

答案 2 :(得分:0)

您似乎缺少变量中的 concat。查看我的原始 json,这就是它的配置方式。看看能不能做类似的,把子网名和后端地址池转成变量。

"ipConfigurations": [
    {
        "name": "ip-vmss-name",
        "properties": {
            "primary": true,
            "subnet": {
                "id": "[concat(parameters('virtualNetworks_vnet_externalid'), '/subnets/snet-vm')]"
            },
            "privateIPAddressVersion": "IPv4",
            "applicationGatewayBackendAddressPools": [
                {
                    "id": "[concat(parameters('applicationGateways_agw_1_externalid'), '/backendAddressPools/be-addr-pool-vmss-1')]"
                }
            ]
        }
    }
]
相关问题