如何在ARM模板中检索Application Insight(位于另一个资源组中)的检测密钥?

时间:2020-03-03 12:38:43

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

是否有任何方法可以在ARM模板中检索Application Insights(位于另一个资源组中)的工具密钥?

我已经使用以下代码使用ARM模板创建了appInsights,

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "AppInsightsName": { "type": "string" },
    "Location": { "type": "string", "defaultValue": "westeurope" }
  },
  "variables": {
    //"apiVersion": "2018-02-01-preview",
    "apiVersion": "2016-08-01",
    "location": "[parameters('Location')]",
    "ApplicationInsightsName": "[parameters('AppInsightsName')]"
  },
  "resources": [
    {
      "apiVersion": "2014-04-01",
      "type": "Microsoft.Insights/components",
      "name": "[variables('ApplicationInsightsName')]",
      "location": "[variables('location')]",
      "kind": "other",
      "properties": {
        "applicationId": "[variables('ApplicationInsightsName')]"
      }
    }
  ]
}

现在,我正在尝试将运行在另一个资源组中的azure函数应用与此appInsights关联。

下面是我尝试过的代码,

{
  "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
  "value": "[reference(resourceId(variables('AppInsightsResourceGroup'),'Microsoft.Insights/components', variables('ApplicationInsightsName'))).InstrumentationKey]"
}

但是我遇到以下错误,

enter image description here

有人可以提出一些想法如何破解吗?

2 个答案:

答案 0 :(得分:1)

可以将引用功能用于已从另一个模板部署的资源。您只需要按照https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource#reference文档中的指示传递apiVersion参数。请注意,您还需要将引用的属性从“ .InstrumentationKey”更改为“ .properties.InstrumentationKey”。

"value": "[reference(resourceId(variables('AppInsightsResourceGroup'),'Microsoft.Insights/components', variables('ApplicationInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey]"

您可以部署以下模板进行验证(只需将两个变量替换为您的值):

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  },
  "variables": {
      "AppInsightsResourceGroup": "myAIRG",
      "ApplicationInsightsName": "myAI"
  },
  "resources": [
  ],
  "outputs": {
      "appInsightsKey": {
          "type": "string",
          "value": "[reference(resourceId(variables('AppInsightsResourceGroup'),'Microsoft.Insights/components', variables('ApplicationInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey]"
      }
  }
}

答案 1 :(得分:-1)

您已经弄清楚,您不能将引用功能用于在另一个模板中部署的资源。 另请参阅:Reference valid uses

您可以编写用于部署Application Insight Azure功能应用程序的单个ARM模板,也可以使用链接的模板拆分部署:另请参见: Using linked and nested templates when deploying Azure resources

另一种选择是在第一个部署中输出InstrumentationKey,并将其存储在您可以在Function App部署中检索它的位置(例如Azure KeyVault或Azure DevOps Variable)...。