未修改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
相关产品推荐
相关产品推荐

