4

我对一系列 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
}

我不确定冲突是什么,因为我添加了依赖段以尝试等待创建网站以及流量管理器端点来完成其配置。我将尝试更改顺序,以便在创建网站后添加 CNAME,然后让流量管理器端点等待 CNAME 创建。我不明白为什么订单应该有所作为。

我是否正确定义了 arm 模板的 Microsoft.Web/sites/hostNameBindings 部分?在这种情况下,依赖顺序是否重要?应该是?

4

2 回答 2

7

正如其他人所提到的,似乎流量管理器会导致异步 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

于 2019-04-01T16:43:46.110 回答
1

当您将 Web 应用程序添加到流量管理器时,两个服务之间会在幕后发生一些异步协调,以检查 Web 应用程序 SKU 是否符合流量管理器的条件,并在 Web 应用程序自定义中注册流量管理器 DNS 名称域名列表。

这个异步过程似乎导致了您看到的错误。您关于颠倒顺序的建议,因此您的 CNAME 在流量管理器注册之前创建,应该可以工作(如果可以的话,我很想知道)。

Jonathan Tuliani,Azure 网络项目经理 - DNS 和流量经理

于 2016-05-26T12:45:12.840 回答