Azure资源模板依赖关系/应用程序洞察

我有一个鸡和蛋问题,将我的Web应用程序部署Application Insights到Azure.在ARM模板中,Application Insights模块依赖于应用程序ID的Web站点(请参阅下面的ARM模板中的依赖项).另一方面,为了完全检测Web应用程序,我需要Application Insights模块中的检测键.怎么绕过这个?

门户网站中的应用程序洞察视图

用于Web App的ARM模板

应用程序洞察的ARM模板

解决方案是将连接字符串和应用程序设置创建为网站的嵌套子资源.通过使用子资源策略,可以使appsettings依赖于网站和应用程序洞察.这允许按以下顺序进行配置:

>网站
>应用见解
>网站配置/ appsettings

以下两个答案很有帮助.第一个说明了如何提取检测密钥.第二个示例说明如何将应用程序设置和连接字符串嵌套为网站的子资源.

How to pull the instrumentation key

How to nest app settings as child resources

这是我的最终模板:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {
    "webSiteName": {
      "type": "string"
    },"aadTenant": {
      "type": "string"
    },"aadAudience": {
      "type": "string"
    },"endpoints": {
      "type": "string","defaultValue": "n/a"
    },"apiEndpoint": {
      "type": "string","sqlConnStrName": {
      "type": "string"
    },"sqlConnStrValue": {
      "type": "string"
    },"skuName": {
      "type": "string","defaultValue": "F1","allowedValues": [
        "F1","D1","B1","B2","B3","S1","S2","S3","P1","P2","P3","P4"
      ],"Metadata": {
        "description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
      }
    },"skuCapacity": {
      "type": "int","defaultValue": 1,"minValue": 1,"Metadata": {
        "description": "Describes plan's instance count"
      }
    }
  },"variables": {
    "hostingPlanName": "[concat(parameters('webSiteName'),'-hostingplan')]"
  },"resources": [
    {
      "apiVersion": "2015-08-01","name": "[variables('hostingPlanName')]","type": "Microsoft.Web/serverfarms","location": "[resourceGroup().location]","tags": {
        "displayName": "HostingPlan"
      },"sku": {
        "name": "[parameters('skuName')]","capacity": "[parameters('skuCapacity')]"
      },"properties": {
        "name": "[variables('hostingPlanName')]"
      }
    },{
      "apiVersion": "2015-08-01","name": "[parameters('webSiteName')]","type": "Microsoft.Web/sites","dependsOn": [
        "[variables('hostingPlanName')]"
      ],"tags": {
        "[concat('hidden-related:',resourceId('Microsoft.Web/serverfarms',variables('hostingPlanName')))]": "empty","displayName": "Website"
      },"properties": {
        "name": "[parameters('webSiteName')]","serverFarmId": "[resourceId('Microsoft.Web/serverfarms',variables('hostingPlanName'))]"
      },"resources": [
        {
          "apiVersion": "2015-08-01","name": "appsettings","type": "config","dependsOn": [
            "[parameters('webSiteName')]","[concat('AppInsights',parameters('webSiteName'))]"
          ],"properties": {
            "ida:Tenant": "[parameters('aadTenant')]","ida:Audience": "[parameters('aadAudience')]","endpoints": "[parameters('endpoints')]","apiEndpoint": "[parameters('apiEndpoint')]","applicationInsightsInstrumentationKey": "[reference(resourceId('Microsoft.Insights/components',concat('AppInsights',parameters('webSiteName'))),'2014-04-01').InstrumentationKey]"
          }
        },{
          "apiVersion": "2015-08-01","name": "connectionstrings","dependsOn": [
            "[parameters('webSiteName')]"
          ],"properties": {
            "[parameters('sqlConnStrName')]": {
              "value": "[parameters('sqlConnStrValue')]","type": "sqlServer"
            }
          }
        },"name": "logs","properties": {
            "applicationLogs": {
              "fileSystem": {
                "level": "Off"
              },"azureTableStorage": {
                "level": "Off","sasUrl": null
              },"azureBlobStorage": {
                "level": "information","sasUrl": "TO DO: pass in a SAS Url","retentionInDays": null
              }
            },"httpLogs": {
              "fileSystem": {
                "retentionInMb": 40,"enabled": true
              }
            },"FailedRequestsTracing": {
              "enabled": true
            },"detailedErrorMessages": {
              "enabled": true
            }
          }
        }
      ]
    },{
      "apiVersion": "2014-04-01","name": "[concat(variables('hostingPlanName'),'-',resourceGroup().name)]","type": "Microsoft.Insights/autoscalesettings","tags": {
        "[concat('hidden-link:',variables('hostingPlanName')))]": "Resource","displayName": "AutoScaleSettings"
      },"properties": {
        "profiles": [
          {
            "name": "Default","capacity": {
              "minimum": 1,"maximum": 2,"default": 1
            },"rules": [
              {
                "metricTrigger": {
                  "metricName": "cpuPercentage","metricResourceUri": "[resourceId('Microsoft.Web/serverfarms',variables('hostingPlanName'))]","timeGrain": "PT1M","statistic": "Average","timeWindow": "PT10M","timeAggregation": "Average","operator": "GreaterThan","threshold": 80.0
                },"scaleAction": {
                  "direction": "Increase","type": "ChangeCount","value": 1,"cooldown": "PT10M"
                }
              },{
                "metricTrigger": {
                  "metricName": "cpuPercentage","timeWindow": "PT1H","operator": "Lessthan","threshold": 60.0
                },"scaleAction": {
                  "direction": "Decrease","cooldown": "PT1H"
                }
              }
            ]
          }
        ],"enabled": false,"targetResourceUri": "[resourceId('Microsoft.Web/serverfarms',variables('hostingPlanName'))]"
      }
    },"name": "[concat('ServerErrors ',parameters('webSiteName'))]","type": "Microsoft.Insights/alertrules","dependsOn": [
        "[parameters('webSiteName')]"
      ],resourceId('Microsoft.Web/sites',parameters('webSiteName')))]": "Resource","displayName": "ServerErrorsAlertRule"
      },"properties": {
        "name": "[concat('ServerErrors ',"description": "[concat(parameters('webSiteName'),' has some server errors,status code 5xx.')]","isEnabled": true,"condition": {
          "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition","dataSource": {
            "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource","resourceUri": "[resourceId('Microsoft.Web/sites',"metricName": "Http5xx"
          },"threshold": 5.0,"windowSize": "PT5M"
        },"action": {
          "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction","sendToServiceOwners": true,"customEmails": ["you@example.com"]
        }
      }
    },"name": "[concat('ForbiddenRequests ',"displayName": "ForbiddenRequestsAlertRule"
      },"properties": {
        "name": "[concat('ForbiddenRequests ',' has some requests that are forbidden,status code 403.')]","metricName": "Http403"
          },"threshold": 5,"customEmails": [ ]
        }
      }
    },"name": "[concat('cpuHigh ',"displayName": "cpuHighAlertRule"
      },"properties": {
        "name": "[concat('cpuHigh ',"description": "[concat('The average cpu is high across all the instances of ',"isEnabled": false,"resourceUri": "[resourceId('Microsoft.Web/serverfarms',"metricName": "cpuPercentage"
          },"threshold": 90,"windowSize": "PT15M"
        },"name": "[concat('LongHttpQueue ',"properties": {
        "name": "[concat('LongHttpQueue ',"description": "[concat('The HTTP queue for the instances of ',variables('hostingPlanName'),' has a large number of pending requests.')]","resourceUri": "[concat(resourceGroup().id,'/providers/Microsoft.Web/serverfarms/',"metricName": "HttpQueueLength"
          },"threshold": 100.0,"name": "[concat('AppInsights',"type": "Microsoft.Insights/components","location": "Central US","displayName": "AppInsightsComponent"
      },"properties": {
        "ApplicationId": "[parameters('webSiteName')]"
      }
    }
  ],"outputs": {
    "siteUri": {
      "type": "string","value": "[reference(concat('Microsoft.Web/sites/',parameters('webSiteName')),'2015-08-01').hostnames[0]]"
    }
  }

}

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...