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

Terraform archive_file数据源source块无法识别源文件内容变更的解决办法

Terraform部署Azure函数:代码更新后无法触发重新部署的解决办法

问题场景

我通过Terraform的archive_file数据源打包Azure Python函数代码,配置如下:

locals {
    tmp_azure_function_zip       = "../code.zip"
    azure_function_local_basedir = "../my_code/"
}

data "archive_file" "functionzip" {
  type        = "zip"
  output_path = local.tmp_azure_function_zip
  excludes    = ["__pycache__"]

  source {
    content  = file("${local.azure_function_local_basedir}/info/__init__.py")
    filename = "info/__init__.py"
  }
  // 其他文件按相同逻辑添加
}

之后通过zip_deploy_file部署:

zip_deploy_file = data.archive_file.functionzip.output_path

首次部署正常,但更新__init__.py等代码文件后,Terraform无法识别变更——因为配置本身没改,不像AWS Lambda有source_code_hash属性,Azure的azurerm_linux_function_app没有类似选项。原本以为file函数能感知文件变化,但实际无效。

解决方案

方法1:用filehash函数添加变更触发器

在archive_file数据源中新增triggers块,通过filehash计算所有源码文件的哈希值。当文件内容变化时,哈希值会更新,Terraform会自动重新执行archive_file生成新的zip包:

data "archive_file" "functionzip" {
  type        = "zip"
  output_path = local.tmp_azure_function_zip
  excludes    = ["__pycache__"]

  // 触发器:监听指定源码文件的哈希变化
  triggers = {
    src_hash = join("", [
      filehash("${local.azure_function_local_basedir}/info/__init__.py"),
      // 把其他需要监听的文件逐个加入
      filehash("${local.azure_function_local_basedir}/utils/helper.py"),
    ])
  }

  source {
    content  = file("${local.azure_function_local_basedir}/info/__init__.py")
    filename = "info/__init__.py"
  }
  // 其他source块保持不变
}

filehash会计算文件的SHA-256哈希,只要文件内容修改,src_hash就会变化,触发zip包重建和函数重新部署。

方法2:改用source_dir替代逐个source块

如果代码都集中在my_code目录下,直接用source_dir替代多个source块,archive_file会自动监听整个目录的文件变化(需确保未在excludes中排除目标文件):

data "archive_file" "functionzip" {
  type        = "zip"
  output_path = local.tmp_azure_function_zip
  source_dir  = local.azure_function_local_basedir
  excludes    = ["__pycache__"]
}

这种方式无需手动维护每个文件的配置,只要目录内文件内容或结构变化,就会触发zip包重建和部署。

补充说明

  • source_dir适合目录结构固定的场景,配置更简洁,无需手动维护文件列表
  • 若需精准控制监听范围,triggers+filehash的方式可以只监听指定文件,避免无关文件变化触发不必要的部署

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:11:15