Terraform为S3桶添加多生命周期规则时出现超时错误
S3桶生命周期规则配置超时问题的解决方法
问题根源
AWS S3的生命周期配置是绑定到整个桶的单一配置实体,每个桶只能有一份完整的生命周期配置。你用两个独立的aws_s3_bucket_lifecycle_configuration资源操作同一个桶时,第二个资源会尝试覆盖第一个的配置,Terraform在跟踪配置状态时会因频繁变更陷入等待,最终触发超时。
解决方法
把两个生命周期规则合并到同一个aws_s3_bucket_lifecycle_configuration资源中,一次性将所有规则应用到桶上,避免资源冲突:
resource "aws_s3_bucket_lifecycle_configuration" "testing_lifecycle" { bucket = aws_s3_bucket.testing.id rule { id = "delete_old_versions" prefix = "" expiration { expired_object_delete_marker = true } noncurrent_version_expiration { noncurrent_days = 1 } status = "Enabled" } rule { id = "delete_old_inventory" prefix = "inventory/" expiration { days = 7 } status = "Enabled" } }
补充说明
- Terraform的AWS Provider中,
aws_s3_bucket_lifecycle_configuration资源是对S3桶生命周期配置的完整替换式管理,每次应用都会覆盖桶上现有的全部生命周期规则,而非追加新规则。 - 如果需要分模块管理不同规则,可以通过Terraform的变量、局部值或模块输出,将多个规则块整合到同一个
aws_s3_bucket_lifecycle_configuration资源中。
内容的提问来源于stack exchange,提问作者polo
相关产品推荐
相关产品推荐

