评估 Azure 资源管理器 (ARM) 模板中的串联变量名称

Evaluate Concatenated Variable Names in Azure Resource Manager (ARM) Template

我正在构建一个模板以使用 copy 函数部署链接模板 n 次,同时递增对象变量(例如从 vmRole1vmRole2) 正在使用,但似乎虽然我能够将适当的变量字符串连接在一起(例如 variables('vmRole1').roleInstanceCount),但它在传递到链接模板之前实际上从未被评估过。

有什么方法可以强制 ARM 模板在将其发送到链接模板之前实际评估循环内的串联字符串?

变量样本:

"vmRole1": {
  ...
  "roleInstanceCount": 2,
  ...
}

资源示例:

{
  "apiVersion": "2015-01-01",
  "type": "Microsoft.Resources/deployments",
  "name": "[concat('DeployRole',copyIndex(1) ,variables('vmRole1Name'))]",
  "copy": {
    "name": "rolecopy",
    "count": 2
  },
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "<proper URL here>",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      ...
      "roleInstanceCount": { "value": "[concat('variables(', variables('singleQuote'), 'vmRole', copyIndex(1), variables('singlequote'), ').roleInstanceCount')]" },
      ...

简单回答 - 没有。
奇怪的答案 - 也许,如果您使用另一组嵌套模板来验证这些值。
长答案 - 你完全错了。我不知道你为什么要假装你正在动态构建一些东西来做这么奇怪的事情......

尝试这样做(使用您的路线):

"value": "[variables(concat('vmRole', copyIndex())).roleInstanceCount]

但老实说,我会将 vmRole1\vmRole2...\vmRole100 废话转换成数组并引用对象,如下所示:

"value": "[variables('vmReferenceArray')[copyIndex()].propertyX]"

您的变量将如下所示:

"vmReferenceArray": [
    {
        propertyX: ...
        propertyY: ...
        ...
    },
    {
        ...
    },
    ...
    {
        ...
    }
]