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

Terraform使用filemd5校验归档文件时遇文件不存在错误的解决求助

解决Terraform中archive_file与S3对象哈希校验的执行顺序问题
  • 核心解决方案:放弃使用filemd5读取生成的ZIP文件,直接引用data.archive_file资源的output_md5属性作为aws_s3_object的etag值。

原因说明

Terraform的执行流程中,filemd5这类函数会在计划(plan)阶段就尝试计算结果,但data.archive_file生成的归档文件要到应用(apply)阶段才会创建,这就导致了计划阶段找不到文件的错误。而data.archive_file资源本身在生成归档时会自动计算并输出文件的MD5哈希值,直接引用该属性既能避免文件路径问题,还能让Terraform自动维护资源间的依赖关系,确保哈希值与生成的归档文件完全匹配。

示例代码

# 生成归档文件的data资源
data "archive_file" "my_archive" {
  type        = "zip"
  source_dir  = "./path/to/source/files" # 替换为你的源文件目录
  output_path = "./archive/s3/my_test_archive.zip"
}

# 上传至S3的资源
resource "aws_s3_object" "my_s3_object" {
  bucket = "your-bucket-name" # 替换为你的存储桶名称
  key    = "my_test_archive.zip"
  source = data.archive_file.my_archive.output_path
  etag   = data.archive_file.my_archive.output_md5 # 直接引用归档资源的MD5值
}

这样配置后,Terraform会先确保归档文件生成并计算出MD5,再将该值作为Etag用于S3对象的变更校验,既解决了文件找不到的问题,又实现了你需要的变更校验需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:20:22