diff --git a/aws/resource_aws_s3_bucket_metric.go b/aws/resource_aws_s3_bucket_metric.go index b4116535ce7..ade4e16edb6 100644 --- a/aws/resource_aws_s3_bucket_metric.go +++ b/aws/resource_aws_s3_bucket_metric.go @@ -36,10 +36,16 @@ func resourceAwsS3BucketMetric() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "prefix": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Optional: true, + AtLeastOneOf: filterAtLeastOneOfKeys, + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, + AtLeastOneOf: filterAtLeastOneOfKeys, }, - "tags": tagsSchema(), }, }, }, diff --git a/aws/resource_aws_s3_bucket_metric_test.go b/aws/resource_aws_s3_bucket_metric_test.go index 1affeb7896c..86b2895987f 100644 --- a/aws/resource_aws_s3_bucket_metric_test.go +++ b/aws/resource_aws_s3_bucket_metric_test.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "reflect" + "regexp" "sort" "testing" "time" @@ -292,6 +293,8 @@ func TestAccAWSS3BucketMetric_basic(t *testing.T) { }) } +// Reference: https://github.com/terraform-providers/terraform-provider-aws/issues/11813 +// Disallow Empty filter block func TestAccAWSS3BucketMetric_WithEmptyFilter(t *testing.T) { var conf s3.MetricsConfiguration rInt := acctest.RandInt() @@ -310,6 +313,7 @@ func TestAccAWSS3BucketMetric_WithEmptyFilter(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckAWSS3BucketMetricsConfigExists(resourceName, &conf), ), + ExpectError: regexp.MustCompile(`config is invalid`), }, }, }) diff --git a/website/docs/guides/version-3-upgrade.html.md b/website/docs/guides/version-3-upgrade.html.md index 9e75070736f..39ef55f5da4 100644 --- a/website/docs/guides/version-3-upgrade.html.md +++ b/website/docs/guides/version-3-upgrade.html.md @@ -32,6 +32,7 @@ Upgrade topics: - [Resource: aws_lb_listener_rule](#resource-aws_lb_listener_rule) - [Resource: aws_msk_cluster](#resource-aws_msk_cluster) - [Resource: aws_s3_bucket](#resource-aws_s3_bucket) +- [Resource: aws_s3_bucket_metric](#resource-aws_s3_bucket_metric) - [Resource: aws_security_group](#resource-aws_security_group) - [Resource: aws_sns_platform_application](#resource-aws_sns_platform_application) - [Resource: aws_spot_fleet_request](#resource-aws_spot_fleet_request) @@ -503,6 +504,30 @@ resource "aws_s3_bucket" "example" { } ``` +## Resource: aws_s3_bucket_metric + +### filter configuration block Plan-Time Validation Change + +The `filter` configuration block no longer supports the empty block `{}` and requires at least one of the `prefix` or `tags` attributes to be specified. + +For example, given this previous configuration: + +```hcl +resource "aws_s3_bucket_metric" "example" { + # ... other configuration ... + + filter {} +} +``` + +An updated configuration: + +```hcl +resource "aws_s3_bucket_metric" "example" { + # ... other configuration ... +} +``` + ## Resource: aws_security_group ### Removal of Automatic aws_security_group_rule Import diff --git a/website/docs/r/s3_bucket_metric.html.markdown b/website/docs/r/s3_bucket_metric.html.markdown index 7eb0aae5284..f1e102abc82 100644 --- a/website/docs/r/s3_bucket_metric.html.markdown +++ b/website/docs/r/s3_bucket_metric.html.markdown @@ -57,6 +57,8 @@ The following arguments are supported: The `filter` metric configuration supports the following: +~> **NOTE**: At least one of `prefix` or `tags` is required when specifying a `filter` + * `prefix` - (Optional) Object prefix for filtering (singular). * `tags` - (Optional) Object tags for filtering (up to 10).