From f6fda8c746d2b6951ae59d7a20d33dbaafe0d70f Mon Sep 17 00:00:00 2001
From: Melissa Greenbaum <69476188+magreenbaum@users.noreply.github.com>
Date: Sun, 6 Oct 2024 14:01:58 -0400
Subject: [PATCH] feat: Support `transition_default_minimum_object_size` (#290)
---
README.md | 5 +++--
examples/complete/README.md | 4 ++--
examples/complete/main.tf | 3 ++-
examples/complete/versions.tf | 2 +-
examples/notification/README.md | 4 ++--
examples/notification/versions.tf | 2 +-
examples/object/README.md | 4 ++--
examples/object/versions.tf | 2 +-
examples/s3-analytics/README.md | 4 ++--
examples/s3-analytics/versions.tf | 2 +-
examples/s3-inventory/README.md | 6 +++---
examples/s3-inventory/main.tf | 3 ++-
examples/s3-inventory/versions.tf | 2 +-
examples/s3-replication/README.md | 6 +++---
examples/s3-replication/versions.tf | 2 +-
main.tf | 5 +++--
variables.tf | 6 ++++++
versions.tf | 2 +-
wrappers/main.tf | 1 +
19 files changed, 38 insertions(+), 27 deletions(-)
diff --git a/README.md b/README.md
index 54a0a41..e93b598 100644
--- a/README.md
+++ b/README.md
@@ -126,13 +126,13 @@ Users of Terragrunt can achieve similar results by using modules provided in the
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
## Providers
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
## Modules
@@ -231,6 +231,7 @@ No modules.
| [restrict\_public\_buckets](#input\_restrict\_public\_buckets) | Whether Amazon S3 should restrict public bucket policies for this bucket. | `bool` | `true` | no |
| [server\_side\_encryption\_configuration](#input\_server\_side\_encryption\_configuration) | Map containing server-side encryption configuration. | `any` | `{}` | no |
| [tags](#input\_tags) | (Optional) A mapping of tags to assign to the bucket. | `map(string)` | `{}` | no |
+| [transition\_default\_minimum\_object\_size](#input\_transition\_default\_minimum\_object\_size) | The default minimum object size behavior applied to the lifecycle configuration. Valid values: all\_storage\_classes\_128K (default), varies\_by\_storage\_class | `string` | `null` | no |
| [versioning](#input\_versioning) | Map containing versioning configuration. | `map(string)` | `{}` | no |
| [website](#input\_website) | Map containing static web-site hosting or redirect configuration. | `any` | `{}` | no |
diff --git a/examples/complete/README.md b/examples/complete/README.md
index 1b49c32..e4126ae 100644
--- a/examples/complete/README.md
+++ b/examples/complete/README.md
@@ -30,14 +30,14 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
| [random](#requirement\_random) | >= 2.0 |
## Providers
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
| [random](#provider\_random) | >= 2.0 |
## Modules
diff --git a/examples/complete/main.tf b/examples/complete/main.tf
index 575c3ad..1f2538b 100644
--- a/examples/complete/main.tf
+++ b/examples/complete/main.tf
@@ -159,7 +159,8 @@ module "s3_bucket" {
control_object_ownership = true
object_ownership = "BucketOwnerPreferred"
- expected_bucket_owner = data.aws_caller_identity.current.account_id
+ expected_bucket_owner = data.aws_caller_identity.current.account_id
+ transition_default_minimum_object_size = "varies_by_storage_class"
acl = "private" # "acl" conflicts with "grant" and "owner"
diff --git a/examples/complete/versions.tf b/examples/complete/versions.tf
index 96f1587..6d9488f 100644
--- a/examples/complete/versions.tf
+++ b/examples/complete/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
random = {
source = "hashicorp/random"
diff --git a/examples/notification/README.md b/examples/notification/README.md
index 1d0ca14..2a8a0bf 100644
--- a/examples/notification/README.md
+++ b/examples/notification/README.md
@@ -20,7 +20,7 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
| [null](#requirement\_null) | >= 2.0 |
| [random](#requirement\_random) | >= 2.0 |
@@ -28,7 +28,7 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
| [null](#provider\_null) | >= 2.0 |
| [random](#provider\_random) | >= 2.0 |
diff --git a/examples/notification/versions.tf b/examples/notification/versions.tf
index f2c39eb..7fd3415 100644
--- a/examples/notification/versions.tf
+++ b/examples/notification/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
random = {
source = "hashicorp/random"
diff --git a/examples/object/README.md b/examples/object/README.md
index f0b162e..64d8556 100644
--- a/examples/object/README.md
+++ b/examples/object/README.md
@@ -20,14 +20,14 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
| [random](#requirement\_random) | >= 2.0 |
## Providers
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
| [random](#provider\_random) | >= 2.0 |
## Modules
diff --git a/examples/object/versions.tf b/examples/object/versions.tf
index 96f1587..6d9488f 100644
--- a/examples/object/versions.tf
+++ b/examples/object/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
random = {
source = "hashicorp/random"
diff --git a/examples/s3-analytics/README.md b/examples/s3-analytics/README.md
index b750946..8b8d0b0 100644
--- a/examples/s3-analytics/README.md
+++ b/examples/s3-analytics/README.md
@@ -10,14 +10,14 @@ Please check [complete example](https://github.com/terraform-aws-modules/terrafo
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
| [random](#requirement\_random) | >= 2.0 |
## Providers
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
| [random](#provider\_random) | >= 2.0 |
## Modules
diff --git a/examples/s3-analytics/versions.tf b/examples/s3-analytics/versions.tf
index 96f1587..6d9488f 100644
--- a/examples/s3-analytics/versions.tf
+++ b/examples/s3-analytics/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
random = {
source = "hashicorp/random"
diff --git a/examples/s3-inventory/README.md b/examples/s3-inventory/README.md
index a408c27..264d009 100644
--- a/examples/s3-inventory/README.md
+++ b/examples/s3-inventory/README.md
@@ -10,14 +10,14 @@ Please check [complete example](https://github.com/terraform-aws-modules/terrafo
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
| [random](#requirement\_random) | >= 2.0 |
## Providers
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
| [random](#provider\_random) | >= 2.0 |
## Modules
@@ -26,7 +26,7 @@ Please check [complete example](https://github.com/terraform-aws-modules/terrafo
|------|--------|---------|
| [inventory\_destination\_bucket](#module\_inventory\_destination\_bucket) | ../../ | n/a |
| [inventory\_source\_bucket](#module\_inventory\_source\_bucket) | ../../ | n/a |
-| [kms](#module\_kms) | terraform-aws-modules/kms/aws | n/a |
+| [kms](#module\_kms) | terraform-aws-modules/kms/aws | ~> 2.0 |
| [multi\_inventory\_configurations\_bucket](#module\_multi\_inventory\_configurations\_bucket) | ../../ | n/a |
## Resources
diff --git a/examples/s3-inventory/main.tf b/examples/s3-inventory/main.tf
index ddbcf73..13cdeb0 100644
--- a/examples/s3-inventory/main.tf
+++ b/examples/s3-inventory/main.tf
@@ -92,7 +92,8 @@ resource "random_pet" "this" {
# https://docs.aws.amazon.com/AmazonS3/latest/userguide/configure-inventory.html#configure-inventory-kms-key-policy
module "kms" {
- source = "terraform-aws-modules/kms/aws"
+ source = "terraform-aws-modules/kms/aws"
+ version = "~> 2.0"
description = "Key example for Inventory S3 destination encyrption"
deletion_window_in_days = 7
diff --git a/examples/s3-inventory/versions.tf b/examples/s3-inventory/versions.tf
index 96f1587..6d9488f 100644
--- a/examples/s3-inventory/versions.tf
+++ b/examples/s3-inventory/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
random = {
source = "hashicorp/random"
diff --git a/examples/s3-replication/README.md b/examples/s3-replication/README.md
index be5723c..0476422 100644
--- a/examples/s3-replication/README.md
+++ b/examples/s3-replication/README.md
@@ -22,15 +22,15 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
-| [aws](#requirement\_aws) | >= 5.27 |
+| [aws](#requirement\_aws) | >= 5.70 |
| [random](#requirement\_random) | >= 2.0 |
## Providers
| Name | Version |
|------|---------|
-| [aws](#provider\_aws) | >= 5.27 |
-| [aws.replica](#provider\_aws.replica) | >= 5.27 |
+| [aws](#provider\_aws) | >= 5.70 |
+| [aws.replica](#provider\_aws.replica) | >= 5.70 |
| [random](#provider\_random) | >= 2.0 |
## Modules
diff --git a/examples/s3-replication/versions.tf b/examples/s3-replication/versions.tf
index 96f1587..6d9488f 100644
--- a/examples/s3-replication/versions.tf
+++ b/examples/s3-replication/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
random = {
source = "hashicorp/random"
diff --git a/main.tf b/main.tf
index fdea2a2..4bffeb0 100644
--- a/main.tf
+++ b/main.tf
@@ -240,8 +240,9 @@ resource "aws_s3_bucket_cors_configuration" "this" {
resource "aws_s3_bucket_lifecycle_configuration" "this" {
count = local.create_bucket && length(local.lifecycle_rules) > 0 ? 1 : 0
- bucket = aws_s3_bucket.this[0].id
- expected_bucket_owner = var.expected_bucket_owner
+ bucket = aws_s3_bucket.this[0].id
+ expected_bucket_owner = var.expected_bucket_owner
+ transition_default_minimum_object_size = var.transition_default_minimum_object_size
dynamic "rule" {
for_each = local.lifecycle_rules
diff --git a/variables.tf b/variables.tf
index 95e0cb4..92feec9 100644
--- a/variables.tf
+++ b/variables.tf
@@ -184,6 +184,12 @@ variable "expected_bucket_owner" {
default = null
}
+variable "transition_default_minimum_object_size" {
+ description = "The default minimum object size behavior applied to the lifecycle configuration. Valid values: all_storage_classes_128K (default), varies_by_storage_class"
+ type = string
+ default = null
+}
+
variable "lifecycle_rule" {
description = "List of maps containing configuration of object lifecycle management."
type = any
diff --git a/versions.tf b/versions.tf
index dc64539..b5d776c 100644
--- a/versions.tf
+++ b/versions.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
- version = ">= 5.27"
+ version = ">= 5.70"
}
}
}
diff --git a/wrappers/main.tf b/wrappers/main.tf
index 6372a85..5b3d0c7 100644
--- a/wrappers/main.tf
+++ b/wrappers/main.tf
@@ -54,6 +54,7 @@ module "wrapper" {
restrict_public_buckets = try(each.value.restrict_public_buckets, var.defaults.restrict_public_buckets, true)
server_side_encryption_configuration = try(each.value.server_side_encryption_configuration, var.defaults.server_side_encryption_configuration, {})
tags = try(each.value.tags, var.defaults.tags, {})
+ transition_default_minimum_object_size = try(each.value.transition_default_minimum_object_size, var.defaults.transition_default_minimum_object_size, null)
versioning = try(each.value.versioning, var.defaults.versioning, {})
website = try(each.value.website, var.defaults.website, {})
}