diff --git a/aws/resource_aws_s3_bucket.go b/aws/resource_aws_s3_bucket.go index f1f54217e62a..07fc549e2a2d 100644 --- a/aws/resource_aws_s3_bucket.go +++ b/aws/resource_aws_s3_bucket.go @@ -2260,7 +2260,8 @@ func resourceAwsS3BucketLifecycleUpdate(s3conn *s3.S3, d *schema.ResourceData) e // we explicitly pass a default ExpiredObjectDeleteMarker value to be able to create // the rule while keeping the policy unaffected if the conditions are not met. if rule.Expiration == nil && rule.NoncurrentVersionExpiration == nil && - rule.Transitions == nil && rule.NoncurrentVersionTransitions == nil { + rule.Transitions == nil && rule.NoncurrentVersionTransitions == nil && + rule.AbortIncompleteMultipartUpload == nil { rule.Expiration = &s3.LifecycleExpiration{ExpiredObjectDeleteMarker: aws.Bool(false)} } diff --git a/aws/resource_aws_s3_bucket_test.go b/aws/resource_aws_s3_bucket_test.go index a544f147e09f..97eed8c94631 100644 --- a/aws/resource_aws_s3_bucket_test.go +++ b/aws/resource_aws_s3_bucket_test.go @@ -1386,6 +1386,32 @@ func TestAccAWSS3Bucket_LifecycleRule_Expiration_EmptyConfigurationBlock(t *test }) } +// Reference: https://github.com/terraform-providers/terraform-provider-aws/issues/15138 +func TestAccAWSS3Bucket_LifecycleRule_AbortIncompleteMultipartUploadDays_NoExpiration(t *testing.T) { + rName := acctest.RandomWithPrefix("tf-acc-test") + resourceName := "aws_s3_bucket.bucket" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSS3BucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSS3BucketConfigLifecycleRuleAbortIncompleteMultipartUploadDays(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSS3BucketExists(resourceName), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"force_destroy", "acl"}, + }, + }, + }) +} + func TestAccAWSS3Bucket_Replication(t *testing.T) { rInt := acctest.RandInt() alternateRegion := testAccGetAlternateRegion() @@ -3711,6 +3737,20 @@ resource "aws_s3_bucket" "bucket" { `, rName) } +func testAccAWSS3BucketConfigLifecycleRuleAbortIncompleteMultipartUploadDays(rName string) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "bucket" { + bucket = %[1]q + + lifecycle_rule { + abort_incomplete_multipart_upload_days = 7 + enabled = true + id = "id1" + } +} +`, rName) +} + func testAccAWSS3BucketConfigReplicationBasic(randInt int) string { return testAccAlternateRegionProviderConfig() + fmt.Sprintf(` data "aws_partition" "current" {}