Azure 如何在ARM模板中动态生成Traffic Manager端点?

Azure 如何在ARM模板中动态生成Traffic Manager端点?,azure,azure-resource-manager,azure-traffic-manager,arm-template,Azure,Azure Resource Manager,Azure Traffic Manager,Arm Template,我有一个ARM模板,它使用copy构造创建任意数量的Azure WebApp,就像这样(删除了不相关的部分): 我还想为创建的每个网站创建一个带有端点的Traffic Manager概要文件。但是,似乎没有办法在Traffic Manager资源的端点参数中使用copy。我看到的所有示例都有端点,但我不知道有多少Web应用程序是提前创建的,所以这对我来说不起作用 如何在模板中动态生成端点?我曾尝试在trafficManagerProfiles资源中使用copy语句,但这会创建多个配置文件,每个配

我有一个ARM模板,它使用
copy
构造创建任意数量的Azure WebApp,就像这样(删除了不相关的部分):

我还想为创建的每个网站创建一个带有端点的Traffic Manager概要文件。但是,似乎没有办法在Traffic Manager资源的
端点
参数中使用
copy
。我看到的所有示例都有端点,但我不知道有多少Web应用程序是提前创建的,所以这对我来说不起作用


如何在模板中动态生成端点?我曾尝试在
trafficManagerProfiles
资源中使用
copy
语句,但这会创建多个配置文件,每个配置文件都有一个端点。

下面是一个创建外部端点作为“子资源”的示例,该配置文件是在没有任何端点的情况下单独创建的,然后该资源会添加端点。它使用了一个外部端点,但应该也适用于webapp,并且与标准复制功能兼容

嗯,, 加雷斯


我尚未对此进行测试,但似乎copy/copyIndex现在应该是traffic manager端点支持的方案:

下面是我不久前实现的一个示例:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "solution-abbreviation": {
      "type": "string",
      "minLength": 1
    },
    "environment-abbreviation": {
      "type": "string",
      "allowedValues": [
        "dev",
        "test",
        "prod"
      ]
    },

    "userinterface-abbreviation": {
      "type": "string",
      "minLength": 1
    },
    "userinterface-locations": {
      "type": "array",
      "minLength": 1
    },
    "userinterface-appserviceplan-sku": {
      "type": "string",
      "allowedValues": [
        "Free",
        "Shared",
        "Basic",
        "Standard"
      ]
    },
    "userinterface-appserviceplan-workersize": {
      "type": "string",
      "allowedValues": [
        "0",
        "1",
        "2"
      ]
    },
    "userinterface-appserviceplan-numberofworkers": {
      "type": "int"
    }
  },
  "variables": {
    "userinterface-trafficmanager-name": "[concat(parameters('solution-abbreviation'), '-', parameters('environment-abbreviation'), '-', parameters('userinterface-abbreviation'))]"
  },
  "resources": [
    {
      "name": "[concat(variables('userinterface-trafficmanager-name'), '-', parameters('userinterface-locations')[copyIndex()])]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[parameters('userinterface-locations')[copyIndex()]]",
      "apiVersion": "2014-06-01",
      "dependsOn": [ ],
      "tags": {
        "displayName": "[concat(variables('userinterface-trafficmanager-name'), '-', parameters('userinterface-locations')[copyIndex()])]"
      },
      "copy": {
        "name": "[concat('serverfarms', '-copy')]",
        "count": "[length(parameters('userinterface-locations'))]"
      },
      "properties": {
        "name": "[concat(variables('userinterface-trafficmanager-name'), '-', parameters('userinterface-locations')[copyIndex()])]",
        "sku": "[parameters('userinterface-appserviceplan-sku')]",
        "workerSize": "[parameters('userinterface-appserviceplan-workersize')]",
        "numberOfWorkers": "[parameters('userinterface-appserviceplan-numberofworkers')]"
      }
    }
  ],
  "outputs": {
  }
}

我不清楚被接受的答案,保罗的答案到目前为止只提供了部分例子。在故障排除过程中,我遇到了另一个与名称段长度相关的错误,这不容易理解,因此我的工作解决方案如下(也删除了不相关的部分):


您可以参考以下模板添加启用了复制的traffic manager端点

Azure不提供在副本中添加端点的功能,因此您需要创建单独的资源并将其链接到原始资源以添加端点。这样,模板内部支持复制功能

"resources": [
    {
      "apiVersion": "2017-05-01",
      "type": "Microsoft.Network/trafficManagerProfiles",
      "name": "[parameters('resourceName')]",
      "location": "global",
      "properties": {
        "profileStatus": "Enabled",
        "trafficRoutingMethod": "Performance",
        "dnsConfig": {
          "relativeName": "[parameters('uniqueDnsName')]",
          "ttl": "[parameters('timeToLive')]"
        },
        "monitorConfig": {
          "protocol": "[parameters('protocol')]",
          "port": "[parameters('portName')]",
          "path": "[parameters('pathName')]",
          "intervalInSeconds": "[parameters('monitorIntervalInSeconds')]",
          "timeoutInSeconds": "[parameters('monitorTimeoutInSeconds')]",
          "toleratedNumberOfFailures": "[parameters('toleratedNumberOfFailures')]"
        }
      }
    },
    {
      "apiVersion": "2017-05-01",
      "type": "Microsoft.Network/trafficManagerProfiles/azureEndpoints",
      "dependsOn": [
        "Microsoft.Network/trafficManagerProfiles/ExampleTMProfile"
      ],
      "location": "global",
      "name": "[concat('ExampleTMProfile/Endpoint', copyIndex())]",
      "copy": {
        "name": "azureEndpointsCopy",
        "count": "[length(parameters('azureEndpointNameArray'))]"
      },
      "properties": {
        "targetResourceId": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('azureEndpointNameArray')[copyIndex()])]",
        "endpointStatus": "Enabled"
      }
    }
  ]

这个链接仍然没有提供一个你将如何创建这些端点的例子,你有一个如何工作的例子吗?我有一个例子。。。我将尝试编辑我的答案,以便在此处包含适当的代码段。它是否是dependsOn属性,指示此端点应是ExternalEndpointExample TrafficManagerProfile的一部分?
{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "solution-abbreviation": {
      "type": "string",
      "minLength": 1
    },
    "environment-abbreviation": {
      "type": "string",
      "allowedValues": [
        "dev",
        "test",
        "prod"
      ]
    },

    "userinterface-abbreviation": {
      "type": "string",
      "minLength": 1
    },
    "userinterface-locations": {
      "type": "array",
      "minLength": 1
    },
    "userinterface-appserviceplan-sku": {
      "type": "string",
      "allowedValues": [
        "Free",
        "Shared",
        "Basic",
        "Standard"
      ]
    },
    "userinterface-appserviceplan-workersize": {
      "type": "string",
      "allowedValues": [
        "0",
        "1",
        "2"
      ]
    },
    "userinterface-appserviceplan-numberofworkers": {
      "type": "int"
    }
  },
  "variables": {
    "userinterface-trafficmanager-name": "[concat(parameters('solution-abbreviation'), '-', parameters('environment-abbreviation'), '-', parameters('userinterface-abbreviation'))]"
  },
  "resources": [
    {
      "name": "[concat(variables('userinterface-trafficmanager-name'), '-', parameters('userinterface-locations')[copyIndex()])]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[parameters('userinterface-locations')[copyIndex()]]",
      "apiVersion": "2014-06-01",
      "dependsOn": [ ],
      "tags": {
        "displayName": "[concat(variables('userinterface-trafficmanager-name'), '-', parameters('userinterface-locations')[copyIndex()])]"
      },
      "copy": {
        "name": "[concat('serverfarms', '-copy')]",
        "count": "[length(parameters('userinterface-locations'))]"
      },
      "properties": {
        "name": "[concat(variables('userinterface-trafficmanager-name'), '-', parameters('userinterface-locations')[copyIndex()])]",
        "sku": "[parameters('userinterface-appserviceplan-sku')]",
        "workerSize": "[parameters('userinterface-appserviceplan-workersize')]",
        "numberOfWorkers": "[parameters('userinterface-appserviceplan-numberofworkers')]"
      }
    }
  ],
  "outputs": {
  }
}
    {
  "type": "Microsoft.Network/trafficManagerProfiles",
  "apiVersion": "2017-05-01",
  "location": "global",
  "name": "[variables('trafManagerProfileName')]",
  "properties": { ...}
},
{
  "apiVersion": "2015-11-01",
  "type": "Microsoft.Network/trafficManagerProfiles/ExternalEndpoints",
  "name": "[concat(variables('trafManagerProfileName'), '/Endpoint', copyIndex())]",
  "dependsOn": [
    "[concat('Microsoft.Network/trafficManagerProfiles/', variables('trafManagerProfileName'))]",
    "[concat(parameters('app_name')[copyIndex()])]"
  ],
  "location": "global",
  "properties": {
    "target": "[concat(parameters('app_name')[copyIndex()])]"        
  },
  "copy": {
    "count": "[variables('app_count')]",
    "name": "app_copy"
  }
},
{
  "type": "Microsoft.Web/sites",
  "name": "[concat(parameters('app_name')[copyIndex()])]",
  "copy": {
    "count": "[variables('app_count')]",
    "name": "app_copy"
  }
}
"resources": [
    {
      "apiVersion": "2017-05-01",
      "type": "Microsoft.Network/trafficManagerProfiles",
      "name": "[parameters('resourceName')]",
      "location": "global",
      "properties": {
        "profileStatus": "Enabled",
        "trafficRoutingMethod": "Performance",
        "dnsConfig": {
          "relativeName": "[parameters('uniqueDnsName')]",
          "ttl": "[parameters('timeToLive')]"
        },
        "monitorConfig": {
          "protocol": "[parameters('protocol')]",
          "port": "[parameters('portName')]",
          "path": "[parameters('pathName')]",
          "intervalInSeconds": "[parameters('monitorIntervalInSeconds')]",
          "timeoutInSeconds": "[parameters('monitorTimeoutInSeconds')]",
          "toleratedNumberOfFailures": "[parameters('toleratedNumberOfFailures')]"
        }
      }
    },
    {
      "apiVersion": "2017-05-01",
      "type": "Microsoft.Network/trafficManagerProfiles/azureEndpoints",
      "dependsOn": [
        "Microsoft.Network/trafficManagerProfiles/ExampleTMProfile"
      ],
      "location": "global",
      "name": "[concat('ExampleTMProfile/Endpoint', copyIndex())]",
      "copy": {
        "name": "azureEndpointsCopy",
        "count": "[length(parameters('azureEndpointNameArray'))]"
      },
      "properties": {
        "targetResourceId": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('azureEndpointNameArray')[copyIndex()])]",
        "endpointStatus": "Enabled"
      }
    }
  ]