func updateKinesisShardLevelMetrics(conn *kinesis.Kinesis, d *schema.ResourceData) error { sn := d.Get("name").(string) o, n := d.GetChange("shard_level_metrics") if o == nil { o = new(schema.Set) } if n == nil { n = new(schema.Set) } os := o.(*schema.Set) ns := n.(*schema.Set) disableMetrics := os.Difference(ns) if disableMetrics.Len() != 0 { metrics := disableMetrics.List() log.Printf("[DEBUG] Disabling shard level metrics %v for stream %s", metrics, sn) props := &kinesis.DisableEnhancedMonitoringInput{ StreamName: aws.String(sn), ShardLevelMetrics: expandStringList(metrics), } _, err := conn.DisableEnhancedMonitoring(props) if err != nil { return fmt.Errorf("Failure to disable shard level metrics for stream %s: %s", sn, err) } if err := waitForKinesisToBeActive(conn, sn); err != nil { return err } } enabledMetrics := ns.Difference(os) if enabledMetrics.Len() != 0 { metrics := enabledMetrics.List() log.Printf("[DEBUG] Enabling shard level metrics %v for stream %s", metrics, sn) props := &kinesis.EnableEnhancedMonitoringInput{ StreamName: aws.String(sn), ShardLevelMetrics: expandStringList(metrics), } _, err := conn.EnableEnhancedMonitoring(props) if err != nil { return fmt.Errorf("Failure to enable shard level metrics for stream %s: %s", sn, err) } if err := waitForKinesisToBeActive(conn, sn); err != nil { return err } } return nil }