当前位置: 首页 > 知识库问答 >
问题:

通过ARM模板覆盖现有azure功能应用程序的应用程序设置

杜彦君
2023-03-14

我已经开发了azure定时器触发函数。我从功能应用程序的应用程序设置中获取计时器时间表,如下所示。

函数. json

这对于给定的静态时间表来说工作正常。但是当用户需要更改时间表时,该时间表应该能够根据另一个Web应用程序的用户要求进行更改。

我正在努力从外部应用程序动态地更改计划参数。我尝试的是部署一个ARM模板,从下面的ARM模板注入新的时间表值。

    {
  "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "name": {
      "type": "String"
    },
    "location": {
      "type": "String"
    },
    "subscriptionId": {
      "type": "String"
    },
    "schedule1": {
      "type": "String"
    },
    "schedule2": {
      "type": "String"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "kind": "functionapp",
      "name": "[parameters('name')]",
      "apiVersion": "2016-03-01",
      "location": "[parameters('location')]",
      "properties": {
        "name": "[parameters('name')]",
        "siteConfig": {
          "appSettings": [
            {
              "name": "schedule1",
              "value": "[parameters('schedule1')]"
            },
            {
              "name": "schedule2",
              "value": "[parameters('schedule2')]"
            }
          ]
        },
        "clientAffinityEnabled": false,
        "reserved": false
      }
    }
  ]
}

但是,这不是重写现有的appSettings。相反,它会返回一个错误“网站已经存在”。是否有任何方法可以覆盖如上所述的appSettings并重新启动函数app,以便影响新的appSettings参数。

共有2个答案

空慈
2023-03-14

对于遇到此问题的任何人,可以使用arm模板覆盖Microsoft.Web/sites资源的应用程序设置(对于某些构建情况可能很重要,以避免除了arm模板之外还必须使用脚本):

将应用设置创建为外部子资源:

"resources": [
    {
        "type": "Microsoft.Web/sites",
        "kind": "functionapp",
        "name": "[parameters('name')]",
        "apiVersion": "2016-03-01",
        "location": "[parameters('location')]",
        "properties": {
            "name": "[parameters('name')]",
            "clientAffinityEnabled": false,
            "reserved": false
        }
    },
    {
        "name": "[concat(parameters('name'), '/', 'appsettings')]",
        "type": "Microsoft.Web/sites/config",
        "apiVersion": "2018-11-01",
        "dependsOn": [
            "[resourceId('Microsoft.Web/sites',parameters('name'))]"
        ],
        "properties": {
            "schedule1": "[parameters('schedule1')]",
            "schedule2": "[parameters('schedule2')]"
        }
    }
]

这样,它就不会被检测为对网站的覆盖,因此允许部署。

龙成仁
2023-03-14

根据我的测试,您的模板在我这边工作正常。

只是一些信息供你参考。

这是我的功能app:

在门户中测试模板:

部署结果:

在门户网站中签入:

注意:这将覆盖应用程序的所有设置,在部署之前,我的应用程序中有其他设置,目前,只有两个设置。

此外,我建议您使用RESTAPI,而不是使用ARM模板,实际上,模板也在调用API。您也可以使用powershell来完成,这里有一篇类似的文章,您可以参考。

 类似资料:
  • 我创建了一个ARM模板,用于创建App Service(web应用程序)和与此模板相似的application Insights资源(https://github.com/tomasr/webapp-appInsights)。App insights连接到web App,并且一切正常,唯一的问题是App insights自动生成请求到我的web App的根,作为可用性测试的一部分,总是返回错误,因

  • 在我的。NET Core应用程序中,我向appsettings.json添加了一个数组,如下所示: 如果我想从azure应用程序服务中的应用程序设置中覆盖该值,使其具有空数组: 有办法做到这一点吗? 我试着把 在应用程序设置中,但它似乎没有覆盖appsettings的值。json

  • 我想开发一个API,使非程序员能够设置电子邮件属性,例如端口或主机。我发现我可以使用Spring Boot注释@ConfigurationProperties在类中加载属性。 我可以使用getPort检索属性,并使用setPort进行设置。 但是,使用此方法可以计算应用程序中的实际值。使用setPort或setHost时,属性文件不会更改。因此,当我重新启动应用程序时,更改会丢失。是否有办法实际更

  • 我的团队希望使用ARM模板为我们的Web应用程序启用Application Insights Live Profiler。Application Insights的这一性能特性在以下链接https://docs.microsoft.com/en-us/azure/application-insights/app-insights-profiler中得到了解释。但是,我找不到任何关于如何使用ARM模

  • 我看了一下这个老问题中提到的工具,但是那些做javascript的工具似乎没有提到任何关于覆盖率分析的内容。尽管radamsa提到了可选地将其与覆盖分析配对,但我还没有找到任何关于如何实际做到这一点的文档。 一个如何用覆盖指导模糊测试Java脚本(在浏览器中)应用程序?