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"
]
}

但是,由于我不想硬编码订阅和resourceGroup,我正在寻找一个解决方案,我们可以在将其传递给aznsAction.actionGroup之前为单个数组值添加前缀。

我认为这里不可能使用copy

基本上我想这样写:

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

有可能实现这样的事情吗?

如果你有一个包含动作组名称的参数像这样:

"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')]"
}