diff --git a/aws/resource_aws_emr_instance_fleet.go b/aws/resource_aws_emr_instance_fleet.go index 117fd952c21f..0ed7c90d8f33 100644 --- a/aws/resource_aws_emr_instance_fleet.go +++ b/aws/resource_aws_emr_instance_fleet.go @@ -8,6 +8,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/emr" + "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/validation" @@ -356,6 +357,11 @@ func resourceAwsEMRInstanceFleetDelete(d *schema.ResourceData, meta interface{}) } _, err := conn.ModifyInstanceFleet(modifyInstanceFleetInput) + + if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "instance fleet may only be modified when the cluster is running or waiting") { + return nil + } + if err != nil { return fmt.Errorf("error deleting/modifying EMR Instance Fleet (%s): %w", d.Id(), err) } diff --git a/aws/resource_aws_emr_instance_fleet_test.go b/aws/resource_aws_emr_instance_fleet_test.go index c192dbe0e464..3bb2345d3935 100644 --- a/aws/resource_aws_emr_instance_fleet_test.go +++ b/aws/resource_aws_emr_instance_fleet_test.go @@ -133,6 +133,8 @@ func TestAccAWSEMRInstanceFleet_disappears(t *testing.T) { var fleet emr.InstanceFleet rName := acctest.RandomWithPrefix("tf-acc-test") resourceName := "aws_emr_instance_fleet.task" + emrClusterResourceName := "aws_emr_cluster.test" + resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, @@ -140,8 +142,11 @@ func TestAccAWSEMRInstanceFleet_disappears(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccAWSEmrInstanceFleetConfig(rName), - Check: resource.ComposeTestCheckFunc(testAccCheckAWSEmrInstanceFleetExists(resourceName, &fleet), - resource.TestCheckResourceAttr(resourceName, "instance_type_configs.#", "1"), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSEmrInstanceFleetExists(resourceName, &fleet), + // EMR Instance Fleet can only be scaled down and are not removed until the + // Cluster is removed. Verify EMR Cluster disappearance handling. + testAccCheckResourceDisappears(testAccProvider, resourceAwsEMRCluster(), emrClusterResourceName), ), ExpectNonEmptyPlan: true, },