【问题标题】:ResourceID function not generating correct resource ID?ResourceID 函数没有生成正确的资源 ID?
【发布时间】:2021-01-14 23:47:49
【问题描述】:

我有一个奇怪的问题,我有一个简单的 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",
            "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
          }
        ]
      }
    }
  ]
}

但是输入我的workspaceName参数,运行部署后,一直报找不到workspace。

"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 功能,没有任何问题

【问题讨论】:

    标签: azure azure-resource-manager arm-template


    【解决方案1】:

    从消息的外观来看,您似乎正在部署到订阅(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

    【讨论】:

    • 谢谢你,你是绝对正确的。这个 Microsoft.Insights/diagnosticSettings 的问题是您必须使用 New-AzDeployment 或 New-AzSubscriptionDeployment,因为它是订阅层。这意味着我不能使用 resourceID 功能。我必须使用 Concat[]
    • @RogerChen - 如果回复有帮助,您能否将答案标记为已接受?
    猜你喜欢
    • 2014-05-10
    • 2016-01-09
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多