Добавьте правило Url в шлюз приложений Azure из другого шаблона ARM - PullRequest
0 голосов
/ 26 января 2019

У меня есть шаблон ARM группы ресурсов, который я использую для создания шлюза приложения, настроенного для URL-маршрутизации.Он отправляет трафик различным веб-приложениям в этой группе ресурсов на основе правил пути URL.Я развертываю шаблон ARM базовой группы ресурсов, а затем каждое веб-приложение имеет свой собственный шаблон ARM, который настраивает веб-приложение в плане обслуживания приложений.Я пытаюсь выяснить, как добавить правило к существующей карте пути URL-адреса на шлюзе приложений, не определяя весь шлюз приложений в каждом шаблоне.Таким образом, я могу просто добавить веб-приложения и заставить их «зарегистрироваться» на шлюзе приложений с определенным правилом пути.

Я подумал о создании связанного шаблона, в котором мой базовый шаблон будет иметь все общие ресурсы (базы данных, план обслуживания приложения и шлюз приложения), но даже со связанным шаблоном я не могу добавитьправило для шлюза приложения.

Обновление Поэтому я изменил свой шаблон, добавив ссылку на существующий шлюз приложения, а затем добавив переменные для нового BackEndPoolAddress и нового правила пути.В конечном итоге это выглядит так (сокращенно только для соответствующих частей):

 "variables": {
    "appGateway": "[reference(concat('Microsoft.Network/applicationGateways/', 'appGateWay-', uniqueString(resourceGroup().id)), '2017-06-01')]",
    "pathRule": {
      "name": "[concat(parameters('websiteName'), '- RoutingRule')]",
      "properties": {
        "paths": [
          "[parameters('routingRule')]"
        ],
        "backendAddressPool": {
          "id": "[concat(variables('appGateway').id, '/backendAddressPools/',parameters('websiteName'), 'BackEndPool')]"
        },
        "backendHttpSettings": {
          "id": "[variables('appGateway').backendHttpSettingsCollection[0]]"
        }
      }
    },
    "backendPool": {
      "name": "[concat(parameters('websiteName'), 'BackEndPool')]",
      "properties": {
        "IpAddress": "[reference(variables('webSiteName')).defaultHostName]"
      }
    }
  },
 "resources": [
  ...
    {
      "apiVersion": "2017-06-01",
      "name": "[variables('appGateway').name]",
      "type": "Microsoft.Network/applicationGateways",
      "location": "[resourceGroup().location]",
      "properties": {
        "backendAddressPools": "[concat(variables('appGateway').backendAddressPools, variables('backendPool'))]",
        "urlPathMaps": [
          {
            "name": "[variables('appGateway').urlPathMaps[0]]",
            "pathRules": "[concat(variables('appGateway').urlPathMaps[0].pathRules, variables('pathRule'))]"
          }
        ]
      }
    }
  ],

Однако я получаю ошибку проверки шаблона, в которой говорится, что я не могу использовать функцию Reference в разделе Variables.Если я не добавлю его в раздел переменных, как я могу построить правильные пути для пула и pathRule в разделе переменных?

1 Ответ

0 голосов
/ 26 января 2019

Вы можете достичь этого, используя функцию reference(), манипуляции с массивами и вложенные шаблоны (может работать даже без них, в худшем случае они вам понадобятся).пример:

"outputs": {
    "httpListeners": {
        "type": "array",
        "value": "[reference('application_gateway_id', '2018-08-01', 'Full').properties.httpListeners]"
    }
}

Вернет вам массив или httpListeners.вы можете получить все соответствующие свойства шлюза приложения и добавить новые (дополнительные) свойства с помощью concat() и присвоить результат свойству (свойствам):

"httpListeners": "[concat(reference('application_gateway_id', '2018-08-01', 'Full').properties.httpListeners, variables('newListener'))]"

, вам просто нужно убедиться, что 2 развертывания не выполняютсяначать одновременно, один может перезаписать другой

...