diff --git a/aws/resource_aws_rds_cluster_instance.go b/aws/resource_aws_rds_cluster_instance.go index 2c1e9d24a016..938e7fed560c 100644 --- a/aws/resource_aws_rds_cluster_instance.go +++ b/aws/resource_aws_rds_cluster_instance.go @@ -382,6 +382,8 @@ func resourceAwsRDSClusterInstanceRead(d *schema.ResourceData, meta interface{}) d.Set("identifier", db.DBInstanceIdentifier) d.Set("instance_class", db.DBInstanceClass) d.Set("kms_key_id", db.KmsKeyId) + d.Set("monitoring_interval", db.MonitoringInterval) + d.Set("monitoring_role_arn", db.MonitoringRoleArn) d.Set("performance_insights_enabled", db.PerformanceInsightsEnabled) d.Set("performance_insights_kms_key_id", db.PerformanceInsightsKMSKeyId) d.Set("preferred_backup_window", db.PreferredBackupWindow) @@ -390,14 +392,6 @@ func resourceAwsRDSClusterInstanceRead(d *schema.ResourceData, meta interface{}) d.Set("publicly_accessible", db.PubliclyAccessible) d.Set("storage_encrypted", db.StorageEncrypted) - if db.MonitoringInterval != nil { - d.Set("monitoring_interval", db.MonitoringInterval) - } - - if db.MonitoringRoleArn != nil { - d.Set("monitoring_role_arn", db.MonitoringRoleArn) - } - if len(db.DBParameterGroups) > 0 { d.Set("db_parameter_group_name", db.DBParameterGroups[0].DBParameterGroupName) } diff --git a/aws/resource_aws_rds_cluster_instance_test.go b/aws/resource_aws_rds_cluster_instance_test.go index 481535cc564a..36c8be1923a6 100644 --- a/aws/resource_aws_rds_cluster_instance_test.go +++ b/aws/resource_aws_rds_cluster_instance_test.go @@ -354,23 +354,25 @@ func testAccCheckAWSClusterInstanceExists(n string, v *rds.DBInstance) resource. } } -func TestAccAWSRDSClusterInstance_withInstanceEnhancedMonitor(t *testing.T) { - var v rds.DBInstance +func TestAccAWSRDSClusterInstance_MonitoringInterval(t *testing.T) { + var dbInstance rds.DBInstance + resourceName := "aws_rds_cluster_instance.test" + rName := acctest.RandomWithPrefix("tf-acc-test") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, - CheckDestroy: testAccCheckAWSClusterDestroy, + CheckDestroy: testAccCheckAWSDBInstanceDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSClusterInstanceEnhancedMonitor(acctest.RandInt()), + Config: testAccAWSClusterInstanceConfigMonitoringInterval(rName, 30), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSClusterInstanceExists("aws_rds_cluster_instance.cluster_instances", &v), - testAccCheckAWSDBClusterInstanceAttributes(&v), + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttr(resourceName, "monitoring_interval", "30"), ), }, { - ResourceName: "aws_rds_cluster_instance.cluster_instances", + ResourceName: resourceName, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{ @@ -378,6 +380,139 @@ func TestAccAWSRDSClusterInstance_withInstanceEnhancedMonitor(t *testing.T) { "identifier_prefix", }, }, + { + Config: testAccAWSClusterInstanceConfigMonitoringInterval(rName, 60), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttr(resourceName, "monitoring_interval", "60"), + ), + }, + { + Config: testAccAWSClusterInstanceConfigMonitoringInterval(rName, 0), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttr(resourceName, "monitoring_interval", "0"), + ), + }, + { + Config: testAccAWSClusterInstanceConfigMonitoringInterval(rName, 30), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttr(resourceName, "monitoring_interval", "30"), + ), + }, + }, + }) +} + +func TestAccAWSRDSClusterInstance_MonitoringRoleArn_EnabledToDisabled(t *testing.T) { + var dbInstance rds.DBInstance + iamRoleResourceName := "aws_iam_role.test" + resourceName := "aws_rds_cluster_instance.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSDBInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSClusterInstanceConfigMonitoringRoleArn(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttrPair(resourceName, "monitoring_role_arn", iamRoleResourceName, "arn"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "apply_immediately", + "identifier_prefix", + }, + }, + { + Config: testAccAWSClusterInstanceConfigMonitoringInterval(rName, 0), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttr(resourceName, "monitoring_interval", "0"), + ), + }, + }, + }) +} + +func TestAccAWSRDSClusterInstance_MonitoringRoleArn_EnabledToRemoved(t *testing.T) { + var dbInstance rds.DBInstance + iamRoleResourceName := "aws_iam_role.test" + resourceName := "aws_rds_cluster_instance.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSDBInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSClusterInstanceConfigMonitoringRoleArn(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttrPair(resourceName, "monitoring_role_arn", iamRoleResourceName, "arn"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "apply_immediately", + "identifier_prefix", + }, + }, + { + Config: testAccAWSClusterInstanceConfigMonitoringRoleArnRemoved(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + ), + }, + }, + }) +} + +func TestAccAWSRDSClusterInstance_MonitoringRoleArn_RemovedToEnabled(t *testing.T) { + var dbInstance rds.DBInstance + iamRoleResourceName := "aws_iam_role.test" + resourceName := "aws_rds_cluster_instance.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSDBInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSClusterInstanceConfigMonitoringRoleArnRemoved(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "apply_immediately", + "identifier_prefix", + }, + }, + { + Config: testAccAWSClusterInstanceConfigMonitoringRoleArn(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists(resourceName, &dbInstance), + resource.TestCheckResourceAttrPair(resourceName, "monitoring_role_arn", iamRoleResourceName, "arn"), + ), + }, }, }) } @@ -751,103 +886,120 @@ resource "aws_db_parameter_group" "bar" { `, n, n, n, n) } -func testAccAWSClusterInstanceEnhancedMonitor(n int) string { +func testAccAWSClusterInstanceConfigMonitoringInterval(rName string, monitoringInterval int) string { return fmt.Sprintf(` -resource "aws_rds_cluster" "default" { - cluster_identifier = "tf-aurora-cluster-test-%d" - availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"] +data "aws_partition" "current" {} + +resource "aws_iam_role" "test" { + name = %[1]q + + assume_role_policy = <