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

求助:Terraform更新Azure Function App配置时随机删除部署的二进制文件

解决Terraform更新Azure Function App配置时删除部署二进制文件的问题

问题根源

当Terraform管理Azure Function App时,若未明确忽略由外部部署(如Azure DevOps)维护的部署相关属性,执行terraform apply时会将资源状态强制同步到代码定义的状态,覆盖外部推送的二进制文件。随机性出现的原因通常是:

  • 部分配置修改会触发Function App的站点同步逻辑(如修改特定AppSettings),而部分不会
  • 不同环境的WEBSITE_ENABLE_SYNC_UPDATE_SITE等配置存在差异,同步行为不一致

具体解决方案

1. 扩展Lifecycle忽略规则

修改Terraform代码中的lifecycle块,加入所有与部署内容相关的属性,禁止Terraform干预外部部署的内容:

lifecycle {
  ignore_changes = [
    # 忽略部署相关的应用设置
    app_settings["WEBSITE_RUN_FROM_PACKAGE"],
    app_settings["WEBSITE_CONTENTSHARE"],
    app_settings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"],
    app_settings["WEBSITE_ENABLE_SYNC_UPDATE_SITE"],
    # 忽略Linux运行时部署相关配置
    site_config.linux_fx_version,
  ]
}

2. 调整同步配置

若你的二进制文件通过Azure DevOps直接推送至Function App关联存储的$web容器,建议将WEBSITE_ENABLE_SYNC_UPDATE_SITE设置为false,避免自动同步清空内容。如果业务需要保留该设置,务必将其加入上述ignore_changes列表,防止Terraform覆盖。

3. 锁定存储账户配置

确保代码中storage_account_name和storage_account_access_key的值固定不变,避免Terraform更新时切换关联存储账户,导致原$web容器的二进制文件无法访问。若必须更新存储账户,需提前迁移内容,或把这两个属性加入ignore_changes。

4. 分离配置与部署管理(可选)

如果需要Terraform与Azure DevOps协同工作,可使用azurerm_function_app_deployment单独管理部署包,让主Function App资源仅负责配置:

resource "azurerm_function_app_deployment" "function_deployment" {
  count               = length(var.function)
  function_app_id     = azurerm_linux_function_app.function[count.index].id
  source_code_hash    = filebase64sha256("path/to/deployment/package.zip")
  package_uri         = "https://your-storage-account.blob.core.windows.net/deploy-packages/package.zip"
}

此方式下,配置更新不会影响已部署的二进制文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:42:24