首页 > 解决方案 > ARM:解决方案模板:多个 VM:如何在不硬编码 ips 的情况下配置 BackendAddresses 数组的内容

问题描述

我尝试在通常的地方进行 RTFM ,但没有一个示例101-application-gateway显示这种模式。我有一个部署 N 个 VM 的解决方案模板 ARM 模板。我需要使用BackendAddresses引用那些 N VM 的 Azure 应用程序网关进行预配和配置。我熟悉copyandcopyIndex()模式,但我不知道如何在这里应用它。这些示例的代码如下:

"backendAddressPools": [
    {
        "name": "appGatewayBackendPool",
        "properties": {
            "BackendAddresses": [
                {
                    "IpAddress": "[parameters('backendIpAddress1')]"
                },
                {
                    "IpAddress": "[parameters('backendIpAddress2')]"
                }
            ]
        }
    }
],

但我想做类似的事情:

"backendAddressPools": [
    {
        "name": "appGatewayBackendPool",
        "properties": {
            "BackendAddresses": [
                {
                    "IpAddress": "[concat(variables('managedVMPrefix'), copyIndex(),variables('nicName'))]"
                }
            ]
        }
    }
],

我确定这行不通,因为我需要BackendAddressess数组中的 N 个条目。

任何想法如何做到这一点?

谢谢,

埃德

标签: azureazure-application-gatewayazure-template

解决方案


在查看了复制工具的参考文档后,我意识到这是正确的语法:

"backendAddressPools": [
  {
    "name": "appGatewayBackendPool",
    "properties": {
        "copy": [{
      "name": "BackendAddresses",
      "count": "[parameters('numberOfInstances')]",
      "input": {
        "IpAddress": "[reference(concat(variables('managedVMPrefix'), copyIndex('BackendAddresses', 1), variables('publicIPAddressName'))).properties.ipAddress]"
      }
        }]
    }
  }
]

给定NumberOfInstances是 3 并reference(concat(variables('managedVMPrefix'), copyIndex('BackendAddresses'), variables('nicName')))解析为mspVM1publicIp, mspVM2publicIp, mspVM1publicIp,它本身通过reference()函数传递给 yield 10.0.1.10, 10.0.1.11, 10.0.1.12,这会产生以下输出:

"backendAddressPools": [
  {
    "name": "appGatewayBackendPool",
    "properties": {
      "BackendAddresses": [
        {
          "IpAddress": "[10.0.1.10]"
        },
        {
          "IpAddress": "[10.0.1.11]"
        },
        {
          "IpAddress": "[10.0.1.12]"
        }
      ]
    }
  }

我必须说,我认为 ARM 模板语法非常难以使用、理解和维护,但如果有更多经验,它可能会变得更容易。


推荐阅读