Как создать несколько экземпляров backendAddressPools, frontendports в шлюзах приложений через шаблон ARM - PullRequest
0 голосов
/ 06 июля 2019

Я создаю шлюзы приложений через шаблон ARM, ссылка - Создать шлюз приложений v2 Я хочу создать несколько экземпляров свойств для шлюза приложений, то есть backendAddressPools, backendHttpSettingsCollection и т. Д. Из вышеупомянутого шаблона.Невозможно создать несколько экземпляров через «копию».

при попытке реализовать в соответствии с примером, приведенным в - множественные экземпляры , показывая приведенную ниже ошибку при выполнении в конвейере Azure DevOps.

Невозможно обработать выражения языка шаблонов для ресурса '/subscription/XXXXXX/resourceGroups/rsgAppGw/providers/Microsoft.Network/applicationGateways/appGwV2' в строке '1' и столбце '2537'.Функция шаблона copyIndex не ожидается в этом месте.Функция может использоваться только в ресурсе с указанной копией ..

azuredeploy.json


{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "virtualNetworkName": {
      "type": "string",
      "defaultValue": "Application-Vnet",
      "metadata": {
        "description": "Virtual Network name"
      }
    },
    "vnetAddressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "Virtual Network address range"
      }
    },
    "subnetName": {
      "type": "string",
      "defaultValue": "ApplicationGatewaySubnet",
      "metadata": {
        "description": "Name of the subnet"
      }
    },
    "subnetPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Subnet address range"
      }
    },
    "applicationGatewayName": {
      "type": "string",
      "defaultValue": "applicationGatewayV2",
      "metadata": {
        "description": "Application Gateway name"
      }
    },
    "minCapacity": {
      "type": "int",
      "defaultValue": 2,
      "metadata": {
        "description": "Minimum instance count for Application Gateway"
      }
    },
    "frontendPort": {
      "type": "int",
      "defaultValue": 80,
      "metadata": {
        "description": "Application Gateway Frontend port"
      }
    },
    "backendPort": {
      "type": "int",
      "defaultValue": 80,
      "metadata": {
        "description": "Application gateway Backend port"
      }
    },
    "backendAddressPools": {
      "type": "array",
      "defaultValue": "",
      "metadata": {
        "description": ""
      }
    },
    "backendIPAddresses": {
      "type": "array",
      "metadata": {
        "description": "Back end pool ip addresses"
      }
    },
    "cookieBasedAffinity": {
      "type": "string",
      "allowedValues": ["Enabled", "Disabled"],
      "defaultValue": "Disabled",
      "metadata": {
        "description": "Cookie based affinity"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "appGwPublicIpName": "[concat(parameters('applicationGatewayName'), '-pip')]",
    "appGwPublicIPRef": "[resourceId('Microsoft.Network/publicIPAddresses',variables('appGwPublicIpName'))]",
    "appGwSize": "Standard_v2",
    "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnetName'))]"
  },
  "resources": [
    {
      "apiVersion": "2018-08-01",
      "type": "Microsoft.Network/virtualNetworks",
      "name": "[parameters('virtualNetworkName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": ["[parameters('vnetAddressPrefix')]"]
        },
        "subnets": [
          {
            "name": "[parameters('subnetName')]",
            "properties": {
              "addressPrefix": "[parameters('subnetPrefix')]"
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2018-08-01",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[variables('appGwPublicIpName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {
        "publicIPAllocationMethod": "Static"
      }
    },
    {
      "apiVersion": "2018-08-01",
      "name": "[parameters('applicationGatewayName')]",
      "type": "Microsoft.Network/applicationGateways",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[variables('appGwPublicIPRef')]",
        "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"
      ],
      "properties": {
        "sku": {
          "name": "[variables('appGwSize')]",
          "tier": "Standard_v2"
        },
        "autoscaleConfiguration": {
          "minCapacity": "[parameters('minCapacity')]"
        },
        "gatewayIPConfigurations": [
          {
            "name": "appGatewayIpConfig",
            "properties": {
              "subnet": {
                "id": "[variables('subnetRef')]"
              }
            }
          }
        ],
        "frontendIPConfigurations": [
          {
            "name": "appGatewayFrontendIP",
            "properties": {
              "PublicIPAddress": {
                "id": "[variables('appGwPublicIpRef')]"
              }
            }
          }
        ],
        "copy": [
          {
            "name": "frontendPorts",
            "count": 1,
            "input": {
              "name": "appGatewayFrontendPort",
              "properties": {
                "Port": "[parameters('frontendPort')]"
              }
            }
          },
          {
            "name": "backendAddressPools",
            "count": "[length(parameters('backendAddressPools'))]",
            "input": {
              "name": "[parameters('backendAddressPools')[copyIndex('backendAddressPools')].name]"
            },
            "copy":{
               "name":"copybackendIPAddresses",
               "count":"[length(parameters('backendIPAddresses'))]",
               "properties":{
                  "IpAddress":"[parameters('backendIPAddresses')[copyIndex('copybackendIPAddresses')].IpAddress]",
                  "fqdn":"[parameters('backendIPAddresses')[copyIndex('copybackendIPAddresses')].fqdn]"
               }
            }
          },
          {
            "name": "backendHttpSettingsCollection",
            "count": 1,
            "input": {
              "name": "appGatewayBackendHttpSettings",
              "properties": {
                "Port": "[parameters('backendPort')]",
                "Protocol": "Http",
                "CookieBasedAffinity": "[parameters('cookieBasedAffinity')]"
              }
            }
          },
          {
            "name": "httpListeners",
            "count": 1,
            "input": {
              "name": "appGatewayHttpListener",
              "properties": {
                "FrontendIpConfiguration": {
                  "Id": "[resourceId('Microsoft.Network/applicationGateways/frontendIPConfigurations', parameters('applicationGatewayName'), 'appGatewayFrontendIP')]"
                },
                "FrontendPort": {
                  "Id": "[resourceId('Microsoft.Network/applicationGateways/frontendPorts', parameters('applicationGatewayName'), 'appGatewayFrontendPort')]"
                },
                "Protocol": "Http"
              }
            }
          },
          {
            "name": "requestRoutingRules",
            "count": 1,
            "input": {
              "name": "rule1",
              "properties": {
                "RuleType": "Basic",
                "httpListener": {
                  "id": "[resourceId('Microsoft.Network/applicationGateways/httpListeners', parameters('applicationGatewayName'), 'appGatewayHttpListener')]"
                },
                "backendAddressPool": {
                  "id": "[resourceId('Microsoft.Network/applicationGateways/backendAddressPools', parameters('applicationGatewayName'), 'appGatewayBackendPool')]"
                },
                "backendHttpSettings": {
                  "id": "[resourceId('Microsoft.Network/applicationGateways/backendHttpSettingsCollection', parameters('applicationGatewayName'), 'appGatewayBackendHttpSettings')]"
                }
              }
            }
          }
        ]
      }
    }
  ]
}

azuredeploy.parameters.json

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "virtualNetworkName": {
      "value": "appGwVNet"
    },
    "vnetAddressPrefix": {
      "value": "10.0.0.0/16"
    },
    "subnetName": {
      "value": "appGwSubNet1"
    },
    "subnetPrefix": {
      "value": "10.0.0.0/24"
    },
    "applicationGatewayName": {
      "value": "appGwV2"
    },
    "minCapacity": {
      "value": 1
    },
    "frontendPort": {
      "value": 80
    },
    "backendPort": {
      "value": 80
    },
    "backendAddressPools": {
      "value": [
        {
          "name": "appGatewayBackendPool1"
        },
        {
          "name": "appGatewayBackendPool2"
        },
        {
          "name": "appGatewayBackendPool3"
        }
      ]
    },
    "backendIPAddresses": {
      "value": [
        [
          {
            "IpAddress": "10.0.0.4"
          },
          {
            "IpAddress": "10.0.0.5"
          }
        ],
        [
          {
            "IpAddress": "10.0.0.7"
          },
          {
            "IpAddress": "10.0.0.8"
          }
        ],
        [
          {
            "fqdn": "mysite.com"
          }
        ]
      ]
    },
    "cookieBasedAffinity": {
      "value": "Disabled"
    },
    "location": {
      "value": "centralus"
    }
  }
}


Хотитесоздать несколько экземпляров свойств, предоставляемых для шлюзов приложений.

1 Ответ

0 голосов
/ 06 июля 2019

Вот пример того, что я делал:

{
    "apiVersion": "2018-04-01",
    "name": "[deployment().name]",
    "type": "Microsoft.Network/applicationGateways",
    "location": "[resourceGroup().location]",
    "properties": {
        "copy": [
            {
                "name": "backendAddressPools",
                "count": "[length(parameters('backendAddressPools'))]",
                "input": {
                    "name": "[parameters('backendAddressPools')[copyIndex('backendAddressPools')].name]",
                    "properties": "[parameters('backendIPAddresses')[copyIndex('backendAddressPools')]]"
                }
            }
        ]
    }
}

. Это просто пример, который вам нужен, чтобы приспособиться к вашим потребностям, но он демонстрирует идею, вам нужно использовать функцию копирования внутриproperties свойство (doh) и определите, что вы хотите получить.Я определил backendAddressPools для вас, который должен работать более или менее в соответствии с тем, что, я думаю, вы хотите (я могу ошибаться, поэтому, возможно, придется немного повозиться здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...