通过ARM模板覆盖现有的Azure功能应用程序的appSettings

时间:2018-08-05 18:05:43

标签: azure azure-web-sites azure-functions azure-resource-manager azure-deployment

我开发了一种天蓝色的计时器触发功能。我正在从功能应用程序的appSettings获取计时器时间表,如下所示。

function.json

function.json

enter image description here

对于给定的静态计划,这可以正常工作。但是,当用户需要更改日程表时,该日程表应能够根据用户要求从另一个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 个答案:

答案 0 :(得分:2)

根据我的测试,您的模板对我而言效果很好。

请提供一些信息供您参考。

这是我的功能应用程序:

enter image description here

在门户中测试模板:

enter image description here

部署结果:

enter image description here

检查门户:

enter image description here

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

此外,我建议您使用REST API,而不是使用ARM模板,从本质上讲,该模板也在调用API。您也可以使用powershell进行操作,这是类似的文章,您可以参考it

答案 1 :(得分:0)

对于遇到此问题的任何人,都可以使用手臂模板来覆盖Microsoft.Web/sites资源的应用设置 (对于某些扩展情况,这很重要,以避免必须在除了手臂模板):

app settings创建为outer child resource

"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')]"
        }
    }
]

这样,它就不会被检测为对网站的替代,因此可以被部署。