Skip to content

Commit

Permalink
feat(terraform): add dynamic lifecycle rules to S3 bucket lifecycle c…
Browse files Browse the repository at this point in the history
…onfiguration

- Introduce dynamic blocks for lifecycle rules, filters, and transitions
- Add nullable parameter to abort_incomplete_multipart_upload variable
- Remove and re-add abort_incomplete_multipart_upload variable to maintain order
  • Loading branch information
MickVanDuijn committed Aug 13, 2024
1 parent 40b8ad5 commit 8e61b15
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 11 deletions.
50 changes: 50 additions & 0 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,56 @@ resource "aws_s3_bucket_lifecycle_configuration" "this" {
}
}
}

dynamic "rule" {
for_each = var.lifecycle_rules
content {
id = rule.value.id
status = rule.value.enabled != false ? "Enabled" : "Disabled"

dynamic "filter" {
for_each = rule.value.prefix != null ? [rule.value.prefix] : []
content {
prefix = rule.value.prefix
}

}

dynamic "filter" {
for_each = try(rule.value.tags, {})
content {
tag {
key = filter.key
value = filter.value
}
}
}

dynamic "noncurrent_version_expiration" {
for_each = rule.value.noncurrent_version_expiration != null ? [rule.value.noncurrent_version_expiration] : []
content {
noncurrent_days = noncurrent_version_expiration.value.days
newer_noncurrent_versions = noncurrent_version_expiration.value.newer_versions
}
}

dynamic "expiration" {
for_each = rule.value.expiration != null ? [rule.value.expiration] : []
content {
days = expiration.value.days
}
}

dynamic "noncurrent_version_transition" {
for_each = rule.value.noncurrent_version_transition != null ? [rule.value.noncurrent_version_transition] : []
content {
noncurrent_days = noncurrent_version_transition.value.days
newer_noncurrent_versions = noncurrent_version_transition.value.newer_versions
storage_class = noncurrent_version_transition.value.storage_class
}
}
}
}
}

# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_server_side_encryption_configuration
Expand Down
52 changes: 41 additions & 11 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,6 @@ variable "tags" {
default = {}
}

variable "abort_incomplete_multipart_upload" {
type = object({
days_after_initiation = number
})

description = "Abort incomplete multipart upload after a certain number of days."
default = {
days_after_initiation = 3
}
}

variable "custom_kms_key_arn" {
type = string
description = "The ARN of the custom KMS key to use for server-side encryption."
Expand Down Expand Up @@ -78,3 +67,44 @@ variable "enable_eventbridge_notification" {
description = "Enables eventbridge notification for this bucket."
default = true
}

variable "abort_incomplete_multipart_upload" {
type = object({
days_after_initiation = number
})

description = "Abort incomplete multipart upload after a certain number of days."
default = {
days_after_initiation = 3
}

nullable = true
}

variable "lifecycle_rules" {
type = list(object({
id = string
enabled = optional(bool, true)
prefix = optional(string)
tags = optional(map(string), {})
noncurrent_version_expiration = optional(object({
days = optional(number)
newer_versions = optional(number)
}))
expiration = optional(object({
days = number
}))
transition = optional(object({
days = number
storage_class = string
}))
noncurrent_version_transition = optional(object({
days = optional(number)
newer_versions = optional(number)
storage_class = string
}))
}))

description = "List of lifecycle rules to apply to the bucket."
default = []
}

0 comments on commit 8e61b15

Please sign in to comment.