Azure:如何使用 ARM 模板安装特定的现有站点扩展?

Azure: How to install a specific existing site extension using ARM template?

我有一个 Azure 应用服务。我想以编程方式安装站点扩展 ASP.NET Core Logging Integration

到目前为止我所做的是:

  1. 通过 Azure 浏览器 GUI(开发工具 -> 扩展)手动安装站点扩展。
  2. 提取 ARM 模板(自动化 -> 导出模板)。
  3. Trim ARM 模板,因此它只包含站点和站点扩展。
  4. 通过 Azure 浏览器 GUI 删除站点扩展。
  5. 使用 CLI (az deployment group create -f template.json...) 安装 ARM 模板(到相同的应用程序服务)。
  6. 在 Azure 浏览器 GUI 中,验证站点扩展现已安装。

以上 有效 。 ARM 模板正确安装站点扩展。但是我不明白怎么会。整个模板如下所示:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "siteName": {
            "type": "string"
        },
        "location": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2021-01-15",
            "name": "[parameters('siteName')]",
            "location": "[parameters('location')]",
            "kind": "app",
            "properties": {}
        },
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2021-01-15",
            "name": "[concat(parameters('siteName'), '/Microsoft.AspNetCore.AzureAppServices.SiteExtension')]",
            "location": "West Europe",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('siteName'))]"
            ]
        }
    ]
}

据我所知,没有指定要安装哪个站点扩展。所以我不明白为什么我的 ARM 模板会这样做。

任何人都可以向我解释如何修改此模板以安装不同的站点扩展吗?

The above works. The ARM template correctly installs the site extension. But I don't understand how.

你的答案在下面的区块中:

{
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2021-01-15",
            "name": "[concat(parameters('siteName'), '/Microsoft.AspNetCore.AzureAppServices.SiteExtension')]",
            "location": "West Europe",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('siteName'))]"
            ]
        }

第二个块完成了这项工作,如下所示:

 "name": "[concat(parameters('siteName'), '/Microsoft.AspNetCore.AzureAppServices.SiteExtension')]"

它由两部分组成,首先是 sitename,即 webapp 名称,并添加您要安装的站点扩展,即 Microsoft.AspNetCore.AzureAppServices.SiteExtension,这基本上是扩展的 ID,您可以从 Resource Graph Explorer(技术上是 webappname/siteextensionId),如下所示:

subscriptions>>resourcegroups>>appresourcegroup>>providers>>Microsoft.Web>>Sites>>yourwebappname>>siteextensions


如果您还想安装一些其他扩展,那么您可以在为一个应用程序手动安装后检查 id,如上图所示,并使用以下模板:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "siteName": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "siteextensionId": {
            "type" : "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2021-01-15",
            "name": "[parameters('siteName')]",
            "location": "[parameters('location')]",
            "kind": "app",
            "properties": {}
        },
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2021-01-15",
            "name": "[concat(parameters('siteName'),'/',parameters('siteextensionId'))]",
            "location": "West Europe",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('siteName'))]"
            ]
        }
    ]
}

在我的例子中,我使用了一个扩展 .NET Retrace APM,它的 ID Stackify.AzureWebApps.

输出:

传送门: