ARM模板中Function App appsettings循环配置失败排查
ARM模板中Function App配置项copy循环部署失败原因分析
问题场景
在嵌套ARM模板中尝试使用copy循环为Function App的appsettings添加自定义配置项,未使用copy时部署正常,使用copy后触发部署失败,错误信息如下:
{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.","details":[{"message":"The parameter properties has an invalid value."}]}
对应的问题模板代码片段:
"resources": [ { "type": "Microsoft.Web/sites/config", "apiVersion": "2020-06-01", "name": "[concat(parameters('functionAppName'),'/appsettings')]", "properties": { "FUNCTIONS_EXTENSION_VERSION": "~4", "WEBSITE_NODE_DEFAULT_VERSION": "6.5.0", "WEBSITE_RUN_FROM_PACKAGE": "1", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "~7", "OperationalLogType": "OperationalRecord", "AuditLogType": "AuditRecord", "copy": [ { "name": "copy1", "count": 3, "input": { "name": "[concat('customentry-', copyIndex('copy1'))]" } } ] }, "dependsOn": [] } ],
错误原因
- copy循环使用方式违规:ARM模板不支持直接在
properties对象内部嵌套copy数组来生成配置项,这种写法不符合ARM对对象属性动态生成的语法规范,直接破坏了properties的参数结构有效性。 - 配置项结构不符合API要求:Function App的appsettings
properties要求是扁平的键值对结构("配置键": "配置值"),但你在input中定义的是包含name字段的嵌套对象,生成的结构与API预期完全不匹配,触发了参数无效的报错。
修正方案
要动态生成appsettings配置项,需通过ARM模板函数将原有固定配置与动态生成的键值对合并,推荐使用union结合createObject函数实现:
"resources": [ { "type": "Microsoft.Web/sites/config", "apiVersion": "2020-06-01", "name": "[concat(parameters('functionAppName'),'/appsettings')]", "properties": "[union( { \"FUNCTIONS_EXTENSION_VERSION\": \"~4\", \"WEBSITE_NODE_DEFAULT_VERSION\": \"6.5.0\", \"WEBSITE_RUN_FROM_PACKAGE\": \"1\", \"FUNCTIONS_WORKER_RUNTIME\": \"powershell\", \"FUNCTIONS_WORKER_RUNTIME_VERSION\": \"~7\", \"OperationalLogType\": \"OperationalRecord\", \"AuditLogType\": \"AuditRecord\" }, createObject( range(0, 3), concat('customentry-', copyIndex()), // 此处可自定义配置项的值,比如copyIndex()、固定字符串或其他变量 "default-value" ) )]", "dependsOn": [] } ]
内容的提问来源于stack exchange,提问作者Korman
相关产品推荐
相关产品推荐

