You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM模板如何根据参数动态配置appSettings数组

ARM模板动态生成App Service应用设置实现方案

需求说明

现有ARM模板定义了PrivateKeyCertificateThumbprint字符串参数(默认值为空),需要实现以下逻辑:

  • 参数传入非空值时,向App Service的appSettings中添加WEBSITE_LOAD_CERTIFICATES配置项,值为传入的证书指纹
  • 参数为空时,不添加该配置项
  • 部署过程不能清空/覆盖App Service上已有的其他应用设置

之前尝试单独声明Microsoft.Web/sites/config/appsettings子资源单独配置证书项,部署后会清空所有其他应用设置,不符合预期。

问题原因

Microsoft.Web/sites/config/appsettings资源的部署是全量覆盖行为:只要模板中声明了该资源,无论部署模式选增量还是完整,所有未写在模板配置里的应用设置都会被资源提供程序清空,因此不能用这种方式单独更新单条配置。

实现方法

直接在Microsoft.Web/sites主资源的properties.siteConfig.appSettings节点中,使用ARM模板内置的concat、if、createArray函数动态拼接配置数组,不需要单独拆分appsettings子资源。

修改后的appSettings节点配置如下:

"appSettings": "[concat(
    // 固定存在的基础配置项数组
    createArray(
        {
            'name': 'APPINSIGHTS_INSTRUMENTATIONKEY',
            'value': '[if(empty(parameters('AppinsResourceName')), '', reference(resourceId('microsoft.insights/components/', parameters('AppinsResourceName')), '2015-05-01').InstrumentationKey)]'
        },
        {
            'name': 'ApplicationInsightsAgent_EXTENSION_VERSION',
            'value': '~2'
        },
        {
            'name': 'WEBSITE_HEALTHCHECK_MAXPINGFAILURES',
            'value': '5'
        }
    ),
    // 按参数值判断是否追加证书配置项
    if(
        empty(parameters('PrivateKeyCertificateThumbprint')),
        createArray(),
        createArray(
            {
                'name': 'WEBSITE_LOAD_CERTIFICATES',
                'value': '[parameters('PrivateKeyCertificateThumbprint')]'
            }
        )
    )
)]"

逻辑说明

  • 把所有固定需要存在的应用设置放在第一个createArray块中,作为基础配置
  • 用if函数判断PrivateKeyCertificateThumbprint参数是否为空:
    • 参数为空时,返回空数组,最终拼接出的appSettings里不会包含WEBSITE_LOAD_CERTIFICATES项
    • 参数非空时,返回只包含证书配置项的单元素数组,追加到基础配置后
  • 所有配置都在站点主资源的siteConfig节点下声明,只要把需要保留的模板管控配置都写在基础数组里,就不会出现配置被意外清空的问题。

内容的提问来源于stack exchange,提问作者Dommicentl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:24:23