Azure 应用程序网关 ARM 模板问题与 backendHttpSettingsCollection 中的 pickHostNameFromBackendAddress 和主机名

Azure Application gateway ARM template issue with pickHostNameFromBackendAddress and hostname in backendHttpSettingsCollection

配置 backendHttpSettingsCollection 时 ARM 模板出现问题。我不能对这两个条件(真,假)使用 pickHostNameFromBackendAddress,如果我们 select True 那么主机名就会抛出错误,我尝试应用 json('null'),但它仍然是抛出同样的错误。

有什么方法可以在同一个 ARM 模板中实现这两个条件。

模板:

{
        "name": "backendHttpSettingsCollection",
        "count": "[length(parameters('backendHttpSettings'))]",
        "input": {
          "name": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].name]",
          "properties": {
            "port": 443,
            "pickHostNameFromBackendAddress": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].pickHostNameFromBackendAddress]",
            "hostName": "[if(parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].pickHostNameFromBackendAddress, json('null') , parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].hostName)]",
            "protocol": "Https",
            "probeEnabled": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].probeEnabled]",
            "probe": {
              "id": "[resourceId('Microsoft.Network/applicationGateways/probes',  parameters('applicationGatewayName'), parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].probe)]"
            }
          }
        }
      },

参数:

 {
      "name": "https-test1",
      "hostName": "",
      "probeEnabled": true,
      "pickHostNameFromBackendAddress": true,
      "probe": "slash-probe1"
    },

谢谢

我可以重现同样的错误。即使给hostName.

赋null或空值,也无法通过模板验证

作为解决方法,您可以尝试将所有属性包装在一个参数对象中。为 true 和 false 场景定义两个对象参数。请参阅以下示例:

 "parameters": {
               "pick": {
                  "type": "bool",
                  "defaultValue": true
               },
               "host": {
                  "type": "string",
                  "defaultValue": "leviCustom.com"
               },
            "pickFalse":{
                "type": "object",
                "defaultValue":{
                    "port": 443,
                    "protocol": "Https",
                    "cookieBasedAffinity": "Disabled",
                    "hostName": "[parameters('host')]",
                    "pickHostNameFromBackendAddress": false,
                    "requestTimeout": 20
                }
            },
            "pickTrue":{
                "type": "object",
                "defaultValue":{
                    "port": 443,
                    "protocol": "Https",
                    "cookieBasedAffinity": "Disabled",
                    "pickHostNameFromBackendAddress": true,
                    "requestTimeout": 20
                }
            }
        },

"backendHttpSettingsCollection": [
                            {
                                "name": "LeviHttpSetting",
                                "properties": "[if(parameters('pick'),parameters('pickTrue'),parameters('pickFalse'))]"
                            }

将属性作为变量,如下所示:

"copy": [
  {
    "name": "backendHttpSettingsCollectionWithHost",
    "count": "[length(parameters('backendHttpSettings'))]",
    "input": {
      "name": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithHost')].name]",
      "properties": {
        "port": 443,
        "hostName": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithHost')].hostname]",
        "protocol": "Https",
        "probeEnabled": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithHost')].probeEnabled]",
        "probe": {
          "id": "[resourceId('Microsoft.Network/applicationGateways/probes',  parameters('applicationGatewayName'), parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithHost')].probe)]"
        }
    }
  },
  {
    "name": "backendHttpSettingsCollectionWithoutHost",
    "count": "[length(parameters('backendHttpSettings'))]",
    "input": {
      "name": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithoutHost')].name]",
      "properties": {
        "port": 443,
        "pickHostNameFromBackendAddress": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithoutHost')].pickHostNameFromBackendAddress]",
        "protocol": "Https",
        "probeEnabled": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithoutHost')].probeEnabled]",
        "probe": {
          "id": "[resourceId('Microsoft.Network/applicationGateways/probes',  parameters('applicationGatewayName'), parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollectionWithoutHost')].probe)]"
        }
      }
    }
  }

并在应用程序网关属性中使用如下:

"backendHttpSettingsCollection": "[if(variables('pickHostNameFromBackendAddress')[0], variables('backendHttpSettingsCollectionWithoutHost') , variables('backendHttpSettingsCollectionWithHost'))]",
    

这对两种情况都有效