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, {}) }