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

未修改Lambda代码时Terraform Plan显示无预期变更的解决求助

解决Terraform Plan误报Lambda资源变更的问题

问题根源

你的配置中,data "archive_file"生成本地zip文件时会默认包含文件修改时间戳等元数据,哪怕代码内容无变化,这些元数据的微小差异也会让Terraform误判归档文件哈希变更。同时,本地zip文件的存在会导致Terraform在plan阶段无法准确预计算哈希值,进而触发无意义的变更提示。

解决方案

1. 改用内存归档(推荐)

移除output_path参数,让Terraform在内存中生成归档,避免本地文件元数据干扰哈希计算。同时过滤自动生成的临时文件,进一步稳定哈希值:

data "archive_file" "test_code" {
  type       = "zip"
  source_dir = "${path.module}/lambda_python/test_code"
  # 排除自动生成的临时文件,避免无意义的哈希变化
  exclude = [
    "__pycache__/*",
    "*.pyc",
    ".DS_Store"
  ]
}

2. 调整S3 Object配置

不再依赖本地zip文件,直接使用归档的内存内容上传S3,确保哈希计算完全基于代码内容:

resource "aws_s3_object" "test_code_zip" {
  bucket      = aws_s3_bucket.lambda_code_bucket.id
  key         = "code/test_code.zip"
  content     = data.archive_file.test_code.output_content
  source_hash = data.archive_file.test_code.output_md5
}

3. 保持Lambda哈希引用稳定

继续使用归档内容的哈希值关联Lambda函数,确保只有代码真正变更时才触发资源更新:

resource "aws_lambda_function" "test_code" {
  function_name = "test_code"
  s3_bucket     = aws_s3_bucket.lambda_code_bucket.id
  s3_key        = aws_s3_object.test_code_zip.key
  runtime       = "python3.9"
  handler       = "test_code.lambda_handler"
  timeout       = 600
  source_code_hash = data.archive_file.test_code.output_base64sha256
}

修改后的完整配置

resource "aws_s3_bucket" "lambda_code_bucket" {
  bucket = "${var.environment}-test-code"
  force_destroy = true
}

data "archive_file" "test_code" {
  type       = "zip"
  source_dir = "${path.module}/lambda_python/test_code"
  exclude = [
    "__pycache__/*",
    "*.pyc",
    ".DS_Store"
  ]
}

resource "aws_s3_object" "test_code_zip" {
  bucket      = aws_s3_bucket.lambda_code_bucket.id
  key         = "code/test_code.zip"
  content     = data.archive_file.test_code.output_content
  source_hash = data.archive_file.test_code.output_md5
}

resource "aws_lambda_function" "test_code" {
  function_name = "test_code"
  s3_bucket     = aws_s3_bucket.lambda_code_bucket.id
  s3_key        = aws_s3_object.test_code_zip.key
  runtime       = "python3.9"
  handler       = "test_code.lambda_handler"
  timeout       = 600
  source_code_hash = data.archive_file.test_code.output_base64sha256
}

额外注意事项

  • 清理之前生成的本地test_code.zip文件,避免残留文件干扰配置逻辑。
  • 定期检查代码目录,确保没有新增的临时文件或无关文件进入归档范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:15:26