Развертывание шаблонов ARM ресурсов Microsoft.Web / sites / hostNameBindings с использованием копии

Я использую операцию копирования для массива местоположений центров обработки данных Azure, чтобы развернуть план обслуживания приложений и веб-сайт для каждого местоположения. Я могу создать профиль диспетчера трафика и использовать объект копирования для добавления конечной точки для каждого местоположения в профиль диспетчера трафика.

Когда я пытаюсь установить CNAME для каждого из веб-сайтов на свое собственное доменное имя, используя ресурс Microsoft.Web / sites / hostNameBindings в соответствии с инструкциями здесь Я придумал следующий:

   {
      "type": "Microsoft.Web/sites/hostNameBindings",
      "apiVersion": "[parameters('hostNameBindingsApiVersion')]",
      "copy": {
        "name": "hostNameBindingsEndpointsLoop",
        "count": "[length(parameters('appServicePlanLocations'))]"
      },
      "name": "[concat(concat(variables('webSitePrefix'), parameters('appServicePlanLocations')[copyIndex()]), '/', variables('hostNameBindingsName'))]",
      "location": "[parameters('appServicePlanLocations')[copyIndex()]]",
      "dependsOn": [
        "[concat('Microsoft.Network/trafficManagerProfiles/', variables('trafficManagerName'), '/azureEndpoints/', variables('trafficManagerEndpointPrefix'), parameters('appServicePlanLocations')[copyIndex()])]",
        "[concat('Microsoft.Web/sites/', concat(variables('webSitePrefix'), parameters('appServicePlanLocations')[copyIndex()]))]"
      ],
      "properties": {
        "siteName": "[concat(variables('webSitePrefix'), parameters('appServicePlanLocations')[copyIndex()])]",
        "domainId": null,
        "hostNameType": "Verified"
      }
    }

Используя это, CNAME фактически устанавливается, но развертывание шаблона ARM завершается ошибкой со следующей ошибкой:

{
      "ErrorEntity": {
        "Code": "Conflict",
        "Message": "Cannot modify this site because another operation is in progress. Details: Id: {guid}, OperationName: RegisterTrafficManagerProfile, CreatedTime: 5/24/2016 11:13:54 PM, RequestId: {guid}, EntityType: 1",
        "ExtendedCode": "59203",
        "MessageTemplate": "Cannot modify this site because another operation is in progress. Details: {0}",
        "Parameters": [
          "Id: {guid}, OperationName: RegisterTrafficManagerProfile, CreatedTime: 5/24/2016 11:13:54 PM, RequestId:{guid}, EntityType: 1"
        ],
        "InnerErrors": null
      }
    }
  ],
  "Innererror": null
}

Я не уверен, в чем заключается конфликт, потому что я добавил сегмент зависимости, чтобы попытаться дождаться создания веб-сайта, а также контрольной точки trafficmanage для завершения подготовки. Я попытаюсь изменить порядок так, чтобы после создания веб-сайта я добавлял CNAME, а затем конечная точка диспетчера трафика ожидала создания CNAME. Я не понимаю, почему порядок должен иметь значение.

Правильно ли я определил раздел Microsoft.Web / sites / hostNameBindings в моем шаблоне руки? Имеет ли значение в этом сценарии порядок зависимостей? Должен ли он?


person Paul    schedule 25.05.2016    source источник
comment
Я столкнулся с аналогичной проблемой, когда у меня было несколько привязок hostnameBindings для одного и того же сайта в шаблоне ARM. Что было исправлено, так это обеспечение того, чтобы они не развертывались параллельно. После добавления зависимости между hostnameBindings для принудительного последовательного развертывания эта ошибка исчезла,   -  person Torben Knerr    schedule 29.03.2019


Ответы (2)


Как упоминалось другими, похоже, что диспетчер трафика вызывает проблему с асинхронной операцией итерации hostNameBindings.

Это можно решить, указав синхронную копию в режиме "mode": "serial" с "batchsize": 1:

{
   "type": "Microsoft.Web/sites/hostNameBindings",
   "apiVersion": "[parameters('hostNameBindingsApiVersion')]",
   "copy": {
     "name": "hostNameBindingsEndpointsLoop",
     "count": "[length(parameters('appServicePlanLocations'))]",

     /* FIX for Asynchronous Hostname Conflict */
     "mode": "serial",
     "batchSize": 1
  },
  …

Объяснение свойств "mode" и "batchSize" можно найти здесь:

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-multiple#resource-iteration.

person Simon Gregory    schedule 01.04.2019
comment
Спасибо за ваш код. Наконец, я мог установить несколько hostNameBindings, используя копию. Я поделился своей реализацией в блоге опубликовать. Надеюсь, это поможет. - person David Chelliah; 02.03.2020

Когда вы добавляете веб-приложение в диспетчер трафика, за кулисами между двумя службами происходит некоторая асинхронная координация, чтобы проверить, подходит ли SKU веб-приложения для диспетчера трафика, и зарегистрировать DNS-имя диспетчера трафика в пользовательском веб-приложении. список доменных имен.

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

Джонатан Тулиани, менеджер программы, Сеть Azure - DNS и диспетчер трафика

person Jonathan Tuliani - MSFT    schedule 26.05.2016
comment
Спасибо за ваш ответ. Я попытался изменить порядок зависимостей в начале этого AM, но начал сталкиваться с другими, казалось бы, не связанными с этим проблемами. Мне нужно сосредоточиться на совершенно отдельном вопросе, который возник сегодня днем, но я вернусь к этому вопросу сегодня вечером. - person Paul; 26.05.2016
comment
Я все еще вижу ошибки (хотя и разные) после переключения порядка зависимости. Я обновлю сообщение, включив в него сведения об ошибках, возникающих при переключении порядка зависимости. - person Paul; 03.06.2016
comment
Таким образом, очевидно, что сегодня были проблемы с порталом Azure, и ошибки, о которых я только что упомянул, могли быть отвлекающим маневром. Повторное тестирование ... - person Paul; 03.06.2016
comment
Я попытался изменить порядок зависимостей, но столкнулся с другой проблемой ... Мне пришлось добавить CNAME для каждого из региональных веб-сайтов, чтобы hostNameBindings мог их проверить. Я бы предпочел не определять CNAME для отдельных регионов, а на самом деле хотел бы определять их только на уровне диспетчера трафика. В конце концов мне удалось выяснить проблему с порядком, который я изначально пытался. - person Paul; 03.06.2016
comment
Видимо, я заговорил слишком рано. Хотя мне удалось успешно запустить развертывание, я не могу успешно удалить и воссоздать группу ресурсов. Я продолжаю получать сообщения об ошибках «Не могу изменить этот сайт, потому что выполняется другая операция». - person Paul; 04.06.2016
comment
Привет, Пол, у вас есть более одного hostnameBindings для этого сайта в вашем шаблоне ARM? Если это так, вам может потребоваться убедиться, что они развертываются последовательно, а не параллельно (см. Мой комментарий выше) - person Torben Knerr; 29.03.2019