Skip to content

Commit 03d48c5

Browse files
authored
Add expired object delete marker support to S3 bucket module (#2476)
1 parent 606f7d6 commit 03d48c5

File tree

3 files changed

+39
-14
lines changed

3 files changed

+39
-14
lines changed

terraform/core/10-aws-s3-buckets.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ module "landing_zone" {
4444
local.share_kms_key_with_housing_reporting_role,
4545
local.share_kms_key_with_academy_account
4646
]
47-
include_backup_policy_tags = false
47+
include_backup_policy_tags = false
48+
expired_object_delete_marker = true
4849
}
4950

5051
module "raw_zone" {

terraform/modules/s3-bucket/02-inputs-optional.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,9 @@ variable "include_backup_policy_tags" {
156156
type = bool
157157
default = true
158158
}
159+
160+
variable "expired_object_delete_marker" {
161+
description = "Whether to delete expired object delete markers. Only applies to versioned buckets."
162+
type = bool
163+
default = false
164+
}

terraform/modules/s3-bucket/10-s3-bucket.tf

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -167,27 +167,45 @@ resource "aws_s3_bucket_versioning" "bucket" {
167167
}
168168

169169
resource "aws_s3_bucket_lifecycle_configuration" "bucket" {
170-
count = var.expire_objects_days != null ? 1 : 0
170+
count = (var.expire_objects_days != null || var.expired_object_delete_marker) ? 1 : 0
171171
bucket = aws_s3_bucket.bucket.id
172172

173-
rule {
174-
id = "expire-older-objects"
175-
status = "Enabled"
173+
# Rule for expiring objects by days
174+
dynamic "rule" {
175+
for_each = var.expire_objects_days != null ? [1] : []
176+
content {
177+
id = "expire-older-objects"
178+
status = "Enabled"
176179

177-
filter {}
180+
filter {}
178181

179-
expiration {
180-
days = var.expire_objects_days
181-
}
182+
expiration {
183+
days = var.expire_objects_days
184+
}
182185

183-
noncurrent_version_expiration {
184-
noncurrent_days = var.expire_noncurrent_objects_days
185-
}
186+
noncurrent_version_expiration {
187+
noncurrent_days = var.expire_noncurrent_objects_days
188+
}
186189

187-
abort_incomplete_multipart_upload {
188-
days_after_initiation = var.abort_multipart_days
190+
abort_incomplete_multipart_upload {
191+
days_after_initiation = var.abort_multipart_days
192+
}
189193
}
194+
}
195+
196+
# Rule for deleting expired object delete markers
197+
dynamic "rule" {
198+
for_each = var.expired_object_delete_marker ? [1] : []
199+
content {
200+
id = "delete-expired-delete-markers"
201+
status = "Enabled"
190202

203+
filter {}
204+
205+
expiration {
206+
expired_object_delete_marker = true
207+
}
208+
}
191209
}
192210
}
193211

0 commit comments

Comments
 (0)