azure - ARM:解决方案模板:多个 VM:如何在不硬编码 ips 的情况下配置 BackendAddresses 数组的内容
问题描述
我尝试在通常的地方进行 RTFM ,但没有一个示例101-application-gateway
显示这种模式。我有一个部署 N 个 VM 的解决方案模板 ARM 模板。我需要使用BackendAddresses
引用那些 N VM 的 Azure 应用程序网关进行预配和配置。我熟悉copy
andcopyIndex()
模式,但我不知道如何在这里应用它。这些示例的代码如下:
"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()
函数传递给 yield 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 模板语法非常难以使用、理解和维护,但如果有更多经验,它可能会变得更容易。
推荐阅读
- python - 未绑定的本地错误不会始终如一地发生
- java - 合并排序实现/在递归调用或合并时怀疑错误
- rust - 无法在捕获的树中借用对结构的引用,因为它的寿命不够长
- javascript - 如何禁用 Link/href 所做的 css 更改
- php - Google Fit API 无法添加大部分范围
- python - to_csv 来自带有文件名的循环的多个数据帧
- node.js - 将 ZMQ_XPUB_MANUAL 与 zeromq.js 一起使用
- c++ - 使用小端序的 dec 到 hex 转换函数中的错误
- php - 用“-”重写 URL
- python - 如何处理包含离散和连续数据的数据集