Шаблон ARM для добавления пользовательского имени хоста к набору веб-сайтов

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

    {
      "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
      "type": "Microsoft.Web/sites",
      "kind": "app,linux,container",
      "location": "[parameters('webAppLocations')[copyIndex()]]",
      "apiVersion": "2016-08-01",
      "copy": {
        "count": "[length(parameters('webAppLocations'))]",
        "name": "siteCopy"
      },
      "dependsOn": [
        "farmCopy"
      ],
      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2016-08-01",
          "dependsOn": [
            "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
          ],
          "tags": {
            "displayName": "Application settings"
          },
          "properties": {
            "publishingUsername": "[variables('publishingUsername')]",
            "DOCKER_CUSTOM_IMAGE_NAME": "[parameters('dockerImageName')]"
          }
        }
      ],
      "tags": {
        "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id))), '-', copyIndex())]": "Resource",
        "displayName": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
      },
      "properties": {
        "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-', copyIndex()))]"
      }
    },
    {
      "type": "Microsoft.Web/sites/hostnameBindings",
      "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]",
      "apiVersion": "2016-08-01",
      "location": "[resourceGroup().location]",
      "properties": {
      },
      "dependsOn": [
        "[concat('Microsoft.Web/sites/',parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]"
      ]
    }

2018-03-20T23:50:20.7707394Z ##[error]Deployment template validation failed: 'The template resource '[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]' at line '1' and column '2892' is not valid: The template function 'copyIndex' is not expected at this location. The function can only be used in a resource with copy specified. Please see https://aka.ms/arm-copy for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.'.
2018-03-20T23:50:20.7723109Z ##[error]Task failed while creating or updating the template deployment.

Обратите внимание, что copyIndex () отлично работает с именами веб-сайтов в другом месте шаблона. Так почему же он не работает для раздела «Microsoft.Web / sites / hostnameBindings»? Я в тупике.

Вот параметры. Обратите внимание на параметр webAppLocations, который является массивом.

"parameters": {
    "webAppNamePrefix": {
      "type": "string",
      "minLength": 1
    },
    "dockerImageName": {
      "type": "string",
      "metadata": {
        "description": "Name of docker image to use"
      }
    },
    "farmSkuName": {
      "type": "string",
      "metadata": {
        "description": "Describes plan's pricing tier and capacity. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
      }
    },
    "environmentType": {
      "type": "string",
      "allowedValues": [
        "dev",
        "qa",
        "prod"
      ],
      "metadata": {
        "description": "Environment type name"
      }
    },
    "webAppLocations": {
      "type": "array"
    },
    "trafficManagerPrefix": {
      "type": "string"
    },
    "customHostname": {
      "type": "string",
      "metadata": {
          "description": "The custom hostname that you wish to add."
      }
    }    
  },


person ossentoo    schedule 21.03.2018    source источник


Ответы (1)


Вы никогда не должны помещать что-либо после свойства resources не потому, что это нарушает шаблон, а потому, что на него труднее смотреть. в вашем случае вы разместили Microsoft.Web/sites/hostnameBindings вне ресурсов.

{
    "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
    "type": "Microsoft.Web/sites",
    "kind": "app,linux,container",
    "location": "[parameters('webAppLocations')[copyIndex()]]",
    "apiVersion": "2016-08-01",
    "copy": {
        "count": "[length(parameters('webAppLocations'))]",
        "name": "siteCopy"
    },
    "dependsOn": [
        "farmCopy"
    ],
    "tags": {
        "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id))), '-', copyIndex())]": "Resource",
        "displayName": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
    },
    "properties": {
        "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-', copyIndex()))]"
    },
    "resources": [
        {
            "name": "appsettings",
            "type": "config",
            "apiVersion": "2016-08-01",
            "dependsOn": [
                "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
            ],
            "tags": {
                "displayName": "Application settings"
            },
            "properties": {
                "publishingUsername": "[variables('publishingUsername')]",
                "DOCKER_CUSTOM_IMAGE_NAME": "[parameters('dockerImageName')]"
            }
        },
        {
            "type": "hostnameBindings",
            "name": "[parameters('customHostname')]",
            "apiVersion": "2016-08-01",
            "location": "[resourceGroup().location]",
            "properties": {},
            "dependsOn": [
                "[concat('Microsoft.Web/sites/',parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]"
            ]
        }
    ]
}
person 4c74356b41    schedule 21.03.2018
comment
Выглядит неплохо 4c74356b41 (сложно сказать!). К сожалению, теперь у меня есть еще одна ошибка (я думаю, что продвинулся вперед). Ошибка: ##[error]Deployment template validation failed: 'The template resource 'domain-jmfjo3qd53vd2-site-0' at line '0' and column '0' is not valid: The resource identificator 'Microsoft.Web/sites/prefix-jmfjo3qd53vd2-site-0/host.domain.com' is malformed. Please see https://aka.ms/arm-template-expressions/#reference for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.' Есть идеи, почему это происходит? Благодарность - person ossentoo; 21.03.2018
comment
пробовать этот вариант? я забыл исправить тип ресурса \ имя. моя вина. - person 4c74356b41; 21.03.2018
comment
Благодарю. Я попробовал еще раз. к сожалению, все еще не совсем так, боюсь. Теперь ошибка читается как `## [error] Ошибка проверки шаблона развертывания: 'Ресурс шаблона' host.domain.com 'в строке' 0 'и столбце' 0 'недействителен: идентификатор ресурса' Microsoft.Web / sites / домен-jmfjo3qd53vd2-site-0 / host.domain.com 'имеет неправильный формат` - person ossentoo; 21.03.2018
comment
хорошо, так что, наверное, что-то не так с названием. попробуйте создать те же ресурсы с помощью портала - person 4c74356b41; 21.03.2018
comment
Ok. имя созданного веб-приложения или имя пользовательского домена? - person ossentoo; 22.03.2018
comment
оба, как вы пытаетесь сделать с шаблоном - person 4c74356b41; 22.03.2018
comment
ммм - это странно, я думаю, мне удалось продвинуться вперед, но я наткнулся на другую ошибку. К сожалению, я не могу вставить полную ошибку. Но сводка такова: «Сообщение: запись CNAME, указывающая с host.domain.com на domain-jmfjo3qd53vd2-site-0.azurewebsites.net, не найдена. Альтернативная запись awverify.host.domain.com для awverify.domain-jmfjo3qd53vd2-site-0.azurewebsites.net также не найдена. ' Я добавлю еще немного ниже - person ossentoo; 22.03.2018
comment
Давайте продолжим это обсуждение в чате. - person ossentoo; 22.03.2018