Skip to content

Commit 40bce16

Browse files
brucexclaude
andauthored
Feature - flexible s3 lifecycle rules (#54)
* feat: add flexible S3 lifecycle expiration variables - Add expiration_days variable for current object expiration - Add noncurrent_version_expiration_days variable for old version expiration - Update lifecycle rules to use variables instead of hardcoded values - Expiration automatically enables when days > 0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * feat: make all lifecycle rule fields configurable - Add variables for all S3 lifecycle rule fields - Include abort_incomplete_multipart_upload_days - Add deep archive transition variables - Add standard IA transition variables - Add separate cloudtrail-specific glacier transition variables - All lifecycle behaviors now fully configurable via variables 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * refactor: add cloudtrail prefix to all cloudtrail lifecycle variables - Rename lifecycle variables to have cloudtrail_ prefix for clarity - Add complete set of cloudtrail-specific lifecycle variables - Separate archive and cloudtrail bucket lifecycle configurations - All cloudtrail lifecycle behaviors now independently configurable 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * refactor: convert lifecycle variables to organized maps - Replace individual lifecycle variables with archive_lifecycle_config and cloudtrail_lifecycle_config maps - Use Terraform optional() function with sensible defaults for all fields - Clean up variables.tf by removing 20+ individual lifecycle variables - Maintain backward compatibility through default values - Improve configuration organization and readability 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
1 parent cc46aea commit 40bce16

File tree

2 files changed

+61
-34
lines changed

2 files changed

+61
-34
lines changed

src/main.tf

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -173,19 +173,19 @@ module "archive_bucket" {
173173
enabled = var.lifecycle_rules_enabled
174174
tags = {}
175175

176-
abort_incomplete_multipart_upload_days = null
177-
enable_glacier_transition = var.enable_glacier_transition
178-
glacier_transition_days = var.glacier_transition_days
179-
noncurrent_version_glacier_transition_days = 30
180-
enable_deeparchive_transition = false
181-
deeparchive_transition_days = 0
182-
noncurrent_version_deeparchive_transition_days = 0
183-
enable_standard_ia_transition = false
184-
standard_transition_days = 0
185-
enable_current_object_expiration = false
186-
expiration_days = 0
187-
enable_noncurrent_version_expiration = false
188-
noncurrent_version_expiration_days = 0
176+
abort_incomplete_multipart_upload_days = var.archive_lifecycle_config.abort_incomplete_multipart_upload_days
177+
enable_glacier_transition = var.archive_lifecycle_config.enable_glacier_transition
178+
glacier_transition_days = var.archive_lifecycle_config.glacier_transition_days
179+
noncurrent_version_glacier_transition_days = var.archive_lifecycle_config.noncurrent_version_glacier_transition_days
180+
enable_deeparchive_transition = var.archive_lifecycle_config.enable_deeparchive_transition
181+
deeparchive_transition_days = var.archive_lifecycle_config.deeparchive_transition_days
182+
noncurrent_version_deeparchive_transition_days = var.archive_lifecycle_config.noncurrent_version_deeparchive_transition_days
183+
enable_standard_ia_transition = var.archive_lifecycle_config.enable_standard_ia_transition
184+
standard_transition_days = var.archive_lifecycle_config.standard_transition_days
185+
enable_current_object_expiration = var.archive_lifecycle_config.expiration_days > 0
186+
expiration_days = var.archive_lifecycle_config.expiration_days
187+
enable_noncurrent_version_expiration = var.archive_lifecycle_config.noncurrent_version_expiration_days > 0
188+
noncurrent_version_expiration_days = var.archive_lifecycle_config.noncurrent_version_expiration_days
189189
},
190190
]
191191

@@ -237,19 +237,19 @@ module "cloudtrail_s3_bucket" {
237237
enabled = var.lifecycle_rules_enabled
238238
tags = {}
239239

240-
abort_incomplete_multipart_upload_days = null
241-
enable_glacier_transition = var.enable_glacier_transition
242-
glacier_transition_days = 365
243-
noncurrent_version_glacier_transition_days = 365
244-
enable_deeparchive_transition = false
245-
deeparchive_transition_days = 0
246-
noncurrent_version_deeparchive_transition_days = 0
247-
enable_standard_ia_transition = false
248-
standard_transition_days = 0
249-
enable_current_object_expiration = false
250-
expiration_days = 0
251-
enable_noncurrent_version_expiration = false
252-
noncurrent_version_expiration_days = 0
240+
abort_incomplete_multipart_upload_days = var.cloudtrail_lifecycle_config.abort_incomplete_multipart_upload_days
241+
enable_glacier_transition = var.cloudtrail_lifecycle_config.enable_glacier_transition
242+
glacier_transition_days = var.cloudtrail_lifecycle_config.glacier_transition_days
243+
noncurrent_version_glacier_transition_days = var.cloudtrail_lifecycle_config.noncurrent_version_glacier_transition_days
244+
enable_deeparchive_transition = var.cloudtrail_lifecycle_config.enable_deeparchive_transition
245+
deeparchive_transition_days = var.cloudtrail_lifecycle_config.deeparchive_transition_days
246+
noncurrent_version_deeparchive_transition_days = var.cloudtrail_lifecycle_config.noncurrent_version_deeparchive_transition_days
247+
enable_standard_ia_transition = var.cloudtrail_lifecycle_config.enable_standard_ia_transition
248+
standard_transition_days = var.cloudtrail_lifecycle_config.standard_transition_days
249+
enable_current_object_expiration = var.cloudtrail_lifecycle_config.expiration_days > 0
250+
expiration_days = var.cloudtrail_lifecycle_config.expiration_days
251+
enable_noncurrent_version_expiration = var.cloudtrail_lifecycle_config.noncurrent_version_expiration_days > 0
252+
noncurrent_version_expiration_days = var.cloudtrail_lifecycle_config.noncurrent_version_expiration_days
253253
},
254254
]
255255

src/variables.tf

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,43 @@ variable "lifecycle_rules_enabled" {
2121
default = true
2222
}
2323

24-
variable "enable_glacier_transition" {
25-
type = bool
26-
description = "Enable/disable transition to glacier for log archive bucket. Has no effect unless lifecycle_rules_enabled set to true"
27-
default = true
24+
variable "archive_lifecycle_config" {
25+
type = object({
26+
abort_incomplete_multipart_upload_days = optional(number, null)
27+
enable_glacier_transition = optional(bool, true)
28+
glacier_transition_days = optional(number, 365)
29+
noncurrent_version_glacier_transition_days = optional(number, 30)
30+
enable_deeparchive_transition = optional(bool, false)
31+
deeparchive_transition_days = optional(number, 0)
32+
noncurrent_version_deeparchive_transition_days = optional(number, 0)
33+
enable_standard_ia_transition = optional(bool, false)
34+
standard_transition_days = optional(number, 0)
35+
expiration_days = optional(number, 0)
36+
noncurrent_version_expiration_days = optional(number, 0)
37+
})
38+
description = "Lifecycle configuration for the archive S3 bucket"
39+
default = {}
2840
}
2941

30-
variable "glacier_transition_days" {
31-
type = number
32-
description = "Number of days after which to transition objects to glacier storage in log archive bucket"
33-
default = 365
42+
variable "cloudtrail_lifecycle_config" {
43+
type = object({
44+
abort_incomplete_multipart_upload_days = optional(number, null)
45+
enable_glacier_transition = optional(bool, true)
46+
glacier_transition_days = optional(number, 365)
47+
noncurrent_version_glacier_transition_days = optional(number, 365)
48+
enable_deeparchive_transition = optional(bool, false)
49+
deeparchive_transition_days = optional(number, 0)
50+
noncurrent_version_deeparchive_transition_days = optional(number, 0)
51+
enable_standard_ia_transition = optional(bool, false)
52+
standard_transition_days = optional(number, 0)
53+
expiration_days = optional(number, 0)
54+
noncurrent_version_expiration_days = optional(number, 0)
55+
})
56+
description = "Lifecycle configuration for the cloudtrail S3 bucket"
57+
default = {}
3458
}
3559

60+
3661
variable "object_lock_days_archive" {
3762
type = number
3863
description = "Object lock duration for archive buckets in days"
@@ -62,3 +87,5 @@ variable "s3_force_destroy" {
6287
description = "Set to true to delete non-empty buckets when enabled is set to false"
6388
default = false
6489
}
90+
91+

0 commit comments

Comments
 (0)