Azure ARM模板如何为scheduledQueryRules的actionGroup数组添加资源ID前缀
这个需求可以实现,不需要硬编码订阅ID和资源组信息,有两种常用实现方案:
方案1:使用ARM map 函数(推荐,适用ARM模板API版本2020-06-01及以上)
ARM模板的map函数支持迭代数组的每一个元素,对元素做自定义转换,刚好匹配你需要给每个actionGroup名称拼接资源ID前缀的需求,不需要提前定义额外变量,可以直接写在属性中:
"aznsAction": { "actionGroup": "[map(parameters('actionGroups'), lambda('agName', resourceId('Microsoft.Insights/actionGroups', lambda('agName'))))]" }
resourceId函数会自动取当前部署上下文的订阅ID和资源组拼接进路径,不需要手动硬写。如果你的actionGroup存放在其他资源组/订阅,只需要给resourceId补充对应的资源组、订阅参数即可,同样不需要硬编码固定值。
方案2:使用变量copy语法(兼容旧版ARM模板)
如果你使用的ARM模板版本不支持lambda表达式和map函数,可以通过变量的copy迭代提前生成处理好的完整资源ID数组:
- 先在模板的
variables段添加如下定义:
"variables": { // 其他原有变量保持不变 "copy": [ { "name": "processedActionGroups", "count": "[length(parameters('actionGroups'))]", "input": "[resourceId('Microsoft.Insights/actionGroups', parameters('actionGroups')[copyIndex('processedActionGroups')])]" } ] }
- 再在scheduledQueryRules的属性中直接引用处理好的变量即可:
"aznsAction": { "actionGroup": "[variables('processedActionGroups')]" }
两种方案都不需要修改你的参数文件,参数文件依然可以只传入actionGroup的名称数组,部署时会自动拼接为完整的资源路径。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

