Настройте FirewallRules для всех возможных возможных выходных адресов в шаблоне ARM - PullRequest
0 голосов
/ 06 февраля 2019

Я хотел бы создать правила брандмауэра, чтобы только мое веб-приложение Azure могло подключаться к моей базе данных.Если возможно, я бы хотел сделать это в моем шаблоне ARM.Вот что я пробовал до сих пор:

{
  "variables": {
    "defaultResourceName": "[resourceGroup().name]",
  },
  "resources": [
    {
      "type": "Microsoft.Web/sites/firewallRules",
      "name": "[concat('AllowAzureIpAddress', copyIndex()",
      "apiVersion": "2015-05-01-preview",
      "properties": {
        "startIpAddress": "[reference('Microsoft.Web/sites', variables('defaultResourceName')).possibleOutboundIpAddresses[copyIndex()]]",
        "endIpAddress": "[reference('Microsoft.Web/sites', variables('defaultResourceName')).possibleOutboundIpAddresses[copyIndex()]]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers/', toLower(variables('defaultResourceName')))]"
      ],
      "copy": {
        "name": "firewallRuleCopy",
        "count": "[length(reference('Microsoft.Web/sites', variables('defaultResourceName')).possibleOutboundIpAddresses)]"
      }
    },
  ]
}

Основная проблема - получение возможныхOutboundIpAddresses.Я не уверен, доступны ли они мне здесь, и я получаю сообщение об ошибке, когда я пытаюсь проверить мой шаблон ARM, который говорит The template function 'reference' is not expected at this location. Please see https://aka.ms/arm-template-expressions for usage details..

Кто-нибудь сделал это, у которого есть какой-либо совет о том, какчтобы получить эти OutboundIpAddresses (желательно в списке, чтобы копия могла их использовать)?

1 Ответ

0 голосов
/ 06 февраля 2019

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

{
    "name": "firewallRules",
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2015-01-01",
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "https://paste.ee/d/Hkebg/0",
            "contentVersion": "1.0.0.0"
        },
        "parameters": {
            "prefix": {
                "value": "[variables('prefix')]"
            },
            "iterator": {
                "value": "[split(reference(concat(parameters('prefix'), '-', parameters('webAppNames').name), '2016-03-01', 'Full').properties.possibleOutboundIpAddresses, ',')]"
            }
        }
    }
},
...