resourceId函数未生成正确资源ID?ARM模板部署Workspace找不到报错
解决ARM模板中resourceId函数生成Log Analytics工作区ID缺失资源组的问题
我之前也碰到过一模一样的问题,其实根源在于你调用resourceId()函数时没有指定Log Analytics工作区所在的资源组。
问题原因
resourceId()函数有两种调用逻辑:
- 如果只传入资源类型和名称(就像你现在的写法):
resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName')),函数会默认使用当前ARM模板部署的目标资源组来生成资源ID。 - 但你的Log Analytics工作区是在另一个独立资源组(
cstackhub-sharedsvcs-rg)里的,所以默认生成的ID就会漏掉正确的资源组路径,导致部署时系统找不到对应资源。
解决方案
你需要修改模板,添加一个参数来指定工作区所在的资源组,然后在resourceId()函数里显式传入这个资源组参数:
- 首先在
parameters部分新增workspaceResourceGroup参数:
"parameters": { "workspaceName": {"type": "String"}, "workspaceResourceGroup": {"type": "String"} }
- 然后修改
workspaceId的生成逻辑,补上资源组参数:
"workspaceId": "[resourceId(parameters('workspaceResourceGroup'), 'Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
修改后的完整模板
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "workspaceName": {"type": "String"}, "workspaceResourceGroup": {"type": "String"} }, "resources": [ { "type": "Microsoft.Insights/diagnosticSettings", "apiVersion": "2017-05-01-preview", "name": "send activity log to workspace", "dependsOn": [], "properties": { "workspaceId": "[resourceId(parameters('workspaceResourceGroup'), 'Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]", "logs": [ {"category": "Administrative", "enabled": true}, {"category": "Alert", "enabled": true}, {"category": "Autoscale", "enabled": true}, {"category": "Policy", "enabled": true}, {"category": "Recommendation", "enabled": true}, {"category": "ResourceHealth", "enabled": true}, {"category": "Security", "enabled": true}, {"category": "ServiceHealth", "enabled": true} ] } } ] }
验证效果
部署时传入workspaceResourceGroup参数值为cstackhub-sharedsvcs-rg,这样生成的资源ID就会包含正确的资源组路径,和你通过资源浏览器看到的完全一致,就能解决找不到工作区的报错了。
内容的提问来源于stack exchange,提问作者Roger Chen
相关产品推荐
相关产品推荐

