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

重新部署Azure Function App基础设施致函数失效及调用数据丢失

问题原因分析

1. 函数版本回退&依赖丢失

你的Bicep基础设施部署大概率覆盖了函数应用的部署源配置,或者直接重置了wwwroot目录:

  • 如果Bicep模板里包含zipDeploy、deploymentSource这类与代码部署相关的属性,或者硬编码了WEBSITE_RUN_FROM_PACKAGE指向旧包地址,重新部署时会把Pipelines刚部署的代码覆盖回模板定义的版本。
  • Python函数的依赖是CI阶段打包进部署包的,一旦wwwroot被重置,之前安装的azure.identity等依赖自然就没了。

2. 调用数据丢失

这通常和Application Insights(AI)资源被重置有关:

  • 如果Bicep部署时重新创建了AI资源,或者修改了函数应用的APPINSIGHTS_INSTRUMENTATIONKEY配置,函数会开始向新的AI实例上报数据,旧的调用记录就找不到了。
  • 另外如果用了Complete部署模式,可能会误删关联的AI资源,直接导致数据丢失。
解决方法

1. 彻底解耦基础设施与代码部署

Bicep只负责创建Function App的基础资源:Premium App Service Plan、存储账户、Application Insights、网络配置等,完全不要碰任何与代码部署相关的配置(比如部署源、wwwroot目录、WEBSITE_RUN_FROM_PACKAGE的具体包地址)。函数代码的部署流程单独交给Azure Pipelines,两者互不干涉。

2. 锁定部署源与代码目录

  • 开启WEBSITE_RUN_FROM_PACKAGE设置为1,让函数从只读的zip包运行。这种模式下,Bicep部署无法修改wwwroot目录,完全避免代码被覆盖的问题。这个设置可以在Bicep里初始化,但后续代码更新由Pipelines负责替换zip包。
  • 如果必须在Bicep里配置部署源,确保使用增量更新逻辑,不要硬编码旧的仓库地址或包地址。

3. 保护Application Insights资源

  • 在Bicep模板中对AI资源使用existing: true引用现有实例,或者确保部署模式为Incremental(默认模式,不要改成Complete),防止AI被意外删除或重建。
  • 函数应用的APPINSIGHTS_INSTRUMENTATIONKEY配置,要么在Bicep里通过listKeys动态获取现有AI的密钥,要么完全交给Pipelines维护,不要在Bicep中修改这个值。

4. 强制使用增量部署模式

部署Bicep时明确指定Incremental模式,避免Complete模式误删资源或重置配置:

az deployment group create --resource-group <你的资源组名> --template-file main.bicep --mode Incremental

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:55:18