我正在使用模块通过terraform创建一个AWS S3 bucket。这个模块创建了一个bucket,其中包含我公司要求的许多默认策略/配置。除此之外,它还使用aws_s3_bucket_lifecycle_configuration
设置了一些生命周期规则。
我不想使用这些规则,它们可以通过上述模块的输入禁用。但问题是,当我尝试添加自定义生命周期配置时,每次都会得到不同的结果。有时我的规则会被应用,而在其他情况下,它们不在配置中
甚至文件上也写着:
注意:S3 Buckets只支持单个生命周期配置。将多个aws_s3_bucket_lifecycle_configuration资源声明到同一个s3 bucket将导致配置上的永久差异。
解决这个问题的方法是什么?
我无法将enable_private_bucket
设置为false
,但这是模块中配置资源的代码。
resource "aws_s3_bucket_lifecycle_configuration" "pca_private_bucket_infrequent_access" {
count = var.enable_private_bucket ? 1 : 0
bucket = aws_s3_bucket.pca_private_bucket[0].id
}
您需要使用v3样式,但这似乎是唯一的方法。
以下是我如何使用dynamic
块设置它,其中我有额外的生命周期规则
resource "aws_s3_bucket" "cache" {
bucket = local.cache_bucket_name
force_destroy = false
tags = {
Name = "${var.vpc_name} cache"
}
lifecycle_rule {
id = "${local.cache_bucket_name} lifecycle rule"
abort_incomplete_multipart_upload_days = 1
enabled = true
noncurrent_version_expiration {
days = 1
}
transition {
days = 1
storage_class = "INTELLIGENT_TIERING"
}
}
dynamic "lifecycle_rule" {
for_each = var.cache_expiration_rules
content {
id = "${lifecycle_rule.value["prefix"]} expiration in ${lifecycle_rule.value["days"]} days"
enabled = true
prefix = lifecycle_rule.value["prefix"]
expiration {
days = lifecycle_rule.value["days"]
}
}
}
lifecycle {
prevent_destroy = true
}
}