Terraform部署Azure Function App提示dotnet版本不支持警告
警告出现原因
这个警告是Terraform创建Windows版Azure Function App时的默认运行时配置和项目实际使用的版本不匹配导致的,和项目代码、DevOps流水线配置无关,具体逻辑:
- 你当前的项目配置完全合规:目标框架
net6.0、Functions运行时版本v4、使用4.x版本的SDK,对应官方支持的Azure Functions v4 .NET 6 in-process模型。 - 手动通过Azure门户创建同版本Windows Function App时,门户会自动写入平台级配置:将Functions扩展版本钉选到
~4、.NET框架版本设为v6.0,和项目版本匹配,所以后续部署代码不会出现警告。 - 用Terraform创建Windows Function App时,如果没有显式声明运行时版本,默认配置会将Functions扩展版本钉选到
~3(即v3版本运行时,对应.NET Core 3.1),和上传的.NET 6 v4版本函数代码不兼容,平台就会弹出运行时版本不受支持的警告。 - Linux版Function App使用独立容器化运行时,会自动根据部署的代码产物识别匹配的运行时版本,不会保留默认的旧版本钉选配置,所以不会出现同类警告。
- Azure DevOps的部署任务(不管是Zip Deploy还是自动检测模式)只会上传构建好的代码产物,不会修改Function App的平台级运行时钉选配置,所以切换部署模式无法解决问题。
修复方案
核心是修正Terraform中Windows Function App的运行时配置,不需要修改项目代码或流水线:
- 在Terraform的Windows Function App资源配置中补全运行时参数:
如果你用的是v3.x+版本的azurerm provider,对应azurerm_windows_function_app资源,在site_config块中添加如下配置:
注意:你的项目是in-process模型,不要把site_config { # 保留你已有的其他配置项 functions_extension_version = "~4" dotnet_framework_version = "v6.0" application_stack { dotnet_version = "6.0" } }FUNCTIONS_WORKER_RUNTIME设为dotnet-isolated,保持dotnet即可。 - 检查应用设置中是否存在冲突的配置项:如果在
app_settings块里手动写了FUNCTIONS_EXTENSION_VERSION = "~3"或更低版本的配置,直接删除或修改为~4,避免和site_config中的配置冲突。 - 执行
terraform apply更新现有Function App的平台配置,配置生效后刷新Azure门户,警告会自动消失,不需要重新部署代码。
如果临时不想修改Terraform代码,也可以直接在Azure门户对应Function App的「配置-常规设置」页,手动将Functions运行时版本改为4、.NET版本改为6,保存重启应用即可临时消除警告,但后续执行terraform apply时会被重新覆盖为旧配置,因此建议将配置固化到Terraform代码中。
内容的提问来源于stack exchange,提问作者Maheswara Reddy Yarramreddy
相关产品推荐
相关产品推荐

