Terraform中archive_file重建未触发aws_s3_bucket_object上传如何解决
问题原因
你当前配置的aws_s3_bucket_object资源仅引用了archive_file的output_path属性,该路径为固定值,Terraform默认不会主动扫描路径对应文件的内容变更,因此会判定资源无参数更新,不会触发重新上传逻辑,即使路径下的zip包内容已经被archive_file重建修改。
解决方案
只需在aws_s3_bucket_object资源中引入archive_file输出的文件哈希属性即可,哈希值会在每次archive_file重建后自动更新,触发S3对象的重新上传:
修改后的代码示例
resource "aws_s3_bucket_object" "lambda_dependencies_upload" { bucket = aws_s3_bucket.lambda_dependencies_bucket.id key = "${local.function_s3_object_key}.zip" source = data.archive_file.lambda_dependencies_bundle.output_path # 新增以下任意一行配置即可触发内容变更检测 etag = data.archive_file.lambda_dependencies_bundle.output_md5 # 若S3桶开启了服务端加密,推荐使用source_hash避免etag校验不匹配问题 # source_hash = data.archive_file.lambda_dependencies_bundle.output_sha256 }
说明
etag参数直接使用archive_file生成的MD5哈希,适用于未开启服务端加密的S3桶source_hash参数使用SHA256哈希,兼容性更强,不受S3服务端加密配置影响- 配置后每次
null_resource触发archive_file重建,哈希值会同步更新,自动触发S3对象覆盖上传
内容的提问来源于stack exchange,提问作者andi2.2
相关产品推荐
相关产品推荐

