我试图在通常的地方进行RTFM,但101-application-gateway
中没有一个示例表现出这种模式。 我有一个部署 N 个 VM 的解决方案模板 ARM 模板。 我需要使用引用这 N 个 VM 的BackendAddresses
预配和配置 Azure 应用程序网关。 我熟悉copy
和copyIndex()
模式,但我看不到如何在这里应用它。 这些示例具有如下代码:
"backendAddressPools": [
{
"name": "appGatewayBackendPool",
"properties": {
"BackendAddresses": [
{
"IpAddress": "[parameters('backendIpAddress1')]"
},
{
"IpAddress": "[parameters('backendIpAddress2')]"
}
]
}
}
],
但我想做这样的事情:
"backendAddressPools": [
{
"name": "appGatewayBackendPool",
"properties": {
"BackendAddresses": [
{
"IpAddress": "[concat(variables('managedVMPrefix'), copyIndex(),variables('nicName'))]"
}
]
}
}
],
我确定这行不通,因为我需要在BackendAddressess
数组中有 N 个条目。
任何想法如何做到这一点?
谢谢
艾德
在查看了复制工具的参考文档后,我意识到这是正确的语法:
"backendAddressPools": [
{
"name": "appGatewayBackendPool",
"properties": {
"copy": [{
"name": "BackendAddresses",
"count": "[parameters('numberOfInstances')]",
"input": {
"IpAddress": "[reference(concat(variables('managedVMPrefix'), copyIndex('BackendAddresses', 1), variables('publicIPAddressName'))).properties.ipAddress]"
}
}]
}
}
]
给定NumberOfInstances
是 3 并且reference(concat(variables('managedVMPrefix'), copyIndex('BackendAddresses'), variables('nicName')))
解析为mspVM1publicIp
、mspVM2publicIp
、mspVM1publicIp
,它本身通过reference()
函数传递以产生10.0.1.10
、10.0.1.11
、10.0.1.12
,这会产生以下输出:
"backendAddressPools": [
{
"name": "appGatewayBackendPool",
"properties": {
"BackendAddresses": [
{
"IpAddress": "[10.0.1.10]"
},
{
"IpAddress": "[10.0.1.11]"
},
{
"IpAddress": "[10.0.1.12]"
}
]
}
}
我必须说,我认为 ARM 模板语法非常难以使用、理解和维护,但随着经验的积累,它可能会变得更容易。