diff --git a/aws/resource_aws_s3_bucket.go b/aws/resource_aws_s3_bucket.go index c8c5a0c61750..82a05ea6a39b 100644 --- a/aws/resource_aws_s3_bucket.go +++ b/aws/resource_aws_s3_bucket.go @@ -18,12 +18,14 @@ import ( "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" + "github.com/hashicorp/aws-sdk-go-base/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/terraform-providers/terraform-provider-aws/aws/internal/hashcode" "github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags" + "github.com/terraform-providers/terraform-provider-aws/aws/internal/tfresource" ) const s3BucketCreationTimeout = 2 * time.Minute @@ -810,7 +812,7 @@ func resourceAwsS3BucketRead(d *schema.ResourceData, meta interface{}) error { return resource.RetryableError(err) } - if d.IsNewResource() && isAWSErr(err, s3.ErrCodeNoSuchBucket, "") { + if d.IsNewResource() && tfawserr.ErrCodeEquals(err, s3.ErrCodeNoSuchBucket) { return resource.RetryableError(err) } @@ -821,18 +823,24 @@ func resourceAwsS3BucketRead(d *schema.ResourceData, meta interface{}) error { return nil }) - if isResourceTimeoutError(err) { + if tfresource.TimedOut(err) { _, err = s3conn.HeadBucket(input) } - if isAWSErrRequestFailureStatusCode(err, 404) || isAWSErr(err, s3.ErrCodeNoSuchBucket, "") { + if !d.IsNewResource() && isAWSErrRequestFailureStatusCode(err, 404) { + log.Printf("[WARN] S3 Bucket (%s) not found, removing from state", d.Id()) + d.SetId("") + return nil + } + + if !d.IsNewResource() && tfawserr.ErrCodeEquals(err, s3.ErrCodeNoSuchBucket) { log.Printf("[WARN] S3 Bucket (%s) not found, removing from state", d.Id()) d.SetId("") return nil } if err != nil { - return fmt.Errorf("error reading S3 Bucket (%s): %s", d.Id(), err) + return fmt.Errorf("error reading S3 Bucket (%s): %w", d.Id(), err) } // In the import case, we won't have this