diff --git a/aws/resource_aws_kinesis_firehose_delivery_stream.go b/aws/resource_aws_kinesis_firehose_delivery_stream.go index 10fce25e5f89..4d673f6b8f9d 100644 --- a/aws/resource_aws_kinesis_firehose_delivery_stream.go +++ b/aws/resource_aws_kinesis_firehose_delivery_stream.go @@ -480,7 +480,10 @@ func createExtendedS3Config(d *schema.ResourceData) *firehose.ExtendedS3Destinat Prefix: extractPrefixConfiguration(s3), CompressionFormat: aws.String(s3["compression_format"].(string)), EncryptionConfiguration: extractEncryptionConfiguration(s3), - ProcessingConfiguration: extractProcessingConfiguration(s3), + } + + if _, ok := s3["processing_configuration"]; ok { + configuration.ProcessingConfiguration = extractProcessingConfiguration(s3) } if _, ok := s3["cloudwatch_logging_options"]; ok { @@ -538,7 +541,12 @@ func updateExtendedS3Config(d *schema.ResourceData) *firehose.ExtendedS3Destinat } func extractProcessingConfiguration(s3 map[string]interface{}) *firehose.ProcessingConfiguration { - processingConfiguration := s3["processing_configuration"].([]interface{})[0].(map[string]interface{}) + config := s3["processing_configuration"].([]interface{}) + if len(config) == 0 { + return nil + } + + processingConfiguration := config[0].(map[string]interface{}) return &firehose.ProcessingConfiguration{ Enabled: aws.Bool(processingConfiguration["enabled"].(bool)), diff --git a/aws/resource_aws_kinesis_firehose_delivery_stream_test.go b/aws/resource_aws_kinesis_firehose_delivery_stream_test.go index 070f1e8b9b06..7ecf40afeef9 100644 --- a/aws/resource_aws_kinesis_firehose_delivery_stream_test.go +++ b/aws/resource_aws_kinesis_firehose_delivery_stream_test.go @@ -99,7 +99,6 @@ func TestAccAWSKinesisFirehoseDeliveryStream_s3ConfigUpdates(t *testing.T) { } func TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3basic(t *testing.T) { - rSt := acctest.RandString(5) rName := fmt.Sprintf("aws_kinesis_firehose_delivery_stream_test_%s", rSt) @@ -308,6 +307,27 @@ func TestAccAWSKinesisFirehoseDeliveryStream_ElasticsearchConfigUpdates(t *testi }) } +// Regression test for https://github.com/terraform-providers/terraform-provider-aws/issues/1657 +func TestAccAWSKinesisFirehoseDeliveryStream_missingProcessingConfiguration(t *testing.T) { + var stream firehose.DeliveryStreamDescription + ri := acctest.RandInt() + + resource.Test(t, resource.TestCase{ + PreCheck: testAccKinesisFirehosePreCheck(t), + Providers: testAccProviders, + CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy, + Steps: []resource.TestStep{ + { + Config: testAccKinesisFirehoseDeliveryStreamConfig_missingProcessingConfiguration(ri), + Check: resource.ComposeTestCheckFunc( + testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream), + testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, nil, nil), + ), + }, + }, + }) +} + func testAccCheckKinesisFirehoseDeliveryStreamExists(n string, stream *firehose.DeliveryStreamDescription) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] @@ -934,3 +954,82 @@ resource "aws_kinesis_firehose_delivery_stream" "test_stream_es" { buffering_interval = 500 } }` + +func testAccKinesisFirehoseDeliveryStreamConfig_missingProcessingConfiguration(rInt int) string { + return fmt.Sprintf(` +resource "aws_iam_role" "firehose" { + name = "tf_acctest_firehose_delivery_role_%d" + assume_role_policy = <