ResourceID函数无法生成正确的资源ID?

问题描述

我遇到一个奇怪的问题,我有一个简单的ARM模板,用于将活动日志发送到日志分析工作区,应该足够简单,我的代码如下

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {
    "workspaceName": {
      "type": "String"
    }
  },"resources": [
    {
      "type": "Microsoft.Insights/diagnosticSettings","apiVersion": "2017-05-01-preview","name": "send activity log to workspace","dependsOn": [],"properties": {
        "workspaceId": "[resourceId('Microsoft.OperationalInsights/workspaces',parameters('workspaceName'))]","logs": [
          {
            "category": "Administrative","enabled": true
          },{
            "category": "Alert",{
            "category": "Autoscale",{
            "category": "Policy",{
            "category": "Recommendation",{
            "category": "ResourceHealth",{
            "category": "Security",{
            "category": "ServiceHealth","enabled": true
          }
        ]
      }
    }
  ]
}

但是输入我的工作区名称参数并运行部署后,它一直在抱怨找不到工作区。

“ message”:“资源 '/subscriptions/0000000-0000-0000-0000-0000000000000/providers/microsoft.operationalinsights/workspaces/cstackhub-mcslog-analytics' 不存在。”

(我用0000替换了实际的子ID) 我知道工作区在那里,如果我查看资源浏览器并查看该工作区ID,我可以看到实际上是 “ /subscriptions/0000000-0000-0000-0000-0000000000000/resourcegroups/cstackhub-sharedsvcs-rg/providers/microsoft.operationalinsights/workspaces/cstackhub-mcslog-analytics”

似乎资源ID中缺少resourcegroups / cstackhub-sharedsvs-rg是问题所在,问题是为什么该资源ID功能没有给我正确的资源ID?我在其他模板中一直使用完全相同的资源ID功能,没有任何问题

解决方法

从消息的外观来看,您似乎正在部署到订阅(New-AzDeploymentNew-AzSubscriptionDeployment)而不是资源组(New-AzResourceGroupDeployment)。

部署到订阅时,函数resourceId()将返回

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

部署到资源组时,该函数返回

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

MS文档:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource#return-value-6