首页 > 解决方案 > Azure ARM 模板为数组参数中的每个值添加前缀

问题描述

在一个scheduledQueryRules元素中,我们从参数文件中传递aznsAction.actionGroup(数组)。

参数如下所示:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "actionGroups": {
            "value": [
                "ActionGroupName1",
                "ActionGroupName2",
                "ActionGroupName3",
                "ActionGroupName4"
            ]
        }
    }
}

我们将它传递给 ARM 模板,如下所示:

...
"action": {
    "odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.AlertingAction",
    "severity": "[variables('alertActions').SeverityLevel]",
    "aznsAction": {
        "actionGroup": "[array(parameters('actionGroups'))]"
    },
    "trigger": {
        "thresholdOperator": "[variables('alertTrigger').Operator]",
        "threshold": "[variables('alertTrigger').Threshold]"
    }
}
...

ActionGroups 应该使用resourceId(..)函数来选择,但是参数文件不支持这个。当我们将actionGroups值替换为完整编写的资源路径时,部署工作正常,如下所示:

"actionGroups": {
    "value": [
        "/subscriptions/{id}/resourceGroups/{rg}/providers/microsoft.insights/actiongroups/ActionGroupName1",
        "/subscriptions/{id}/resourceGroups/{rg}/providers/microsoft.insights/actiongroups/ActionGroupName2",
        "/subscriptions/{id}/resourceGroups/{rg}/providers/microsoft.insights/actiongroups/ActionGroupName3",
        "/subscriptions/{id}/resourceGroups/{rg}/providers/microsoft.insights/actiongroups/ActionGroupName4"
        ]
    }

但由于我不想硬编码订阅和资源组,我正在寻找一种解决方案,我们可以在将单个数组值传递给aznsAction.actionGroup.

我认为不可能在copy这里使用。

基本上我想要这样的东西:

"aznsAction": {
    "actionGroup": "[select[array(parameters('actionGroups'))], concat(resourceId(..), parameters('actionGroups')[iterator()])]"
}

有可能实现这样的目标吗?

标签: azureazure-resource-manager

解决方案


因此,如果您有一个包含类似操作组名称的参数:

"parameters": {
  "actionGroups": {
    "type": "array",
    "value": [
      "ActionGroupName1",
      "ActionGroupName2",
      "ActionGroupName3",
      "ActionGroupName4"
    ]
  }
}

您可以创建一个变量来将数组转换为操作组 ID 数组:

"variables": {
  "copy": [
    {
      "name": "actionGroupIds",
      "count": "[length(parameters('actionGroups'))]",
      "input": "[resourceId('Microsoft.Insights/ActionGroups', parameters('actionGroups')[copyIndex('actionGroupIds')])]"
    }
  ]
}

那么你可以像这样使用它:

"aznsAction": {
    "actionGroup": "[variables('actionGroupIds')]"
}

推荐阅读