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'))]",
这对两种情况都有效
配置 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
.
作为解决方法,您可以尝试将所有属性包装在一个参数对象中。为 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'))]",
这对两种情况都有效