diff --git a/aws/resource_aws_lambda_event_source_mapping.go b/aws/resource_aws_lambda_event_source_mapping.go index 6ccf481b20e..6464f5f1dfa 100644 --- a/aws/resource_aws_lambda_event_source_mapping.go +++ b/aws/resource_aws_lambda_event_source_mapping.go @@ -60,6 +60,13 @@ func resourceAwsLambdaEventSourceMapping() *schema.Resource { ForceNew: true, ValidateFunc: validation.IsRFC3339Time, }, + "topics": { + Type: schema.TypeSet, + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + }, "batch_size": { Type: schema.TypeInt, Optional: true, @@ -205,6 +212,11 @@ func resourceAwsLambdaEventSourceMappingCreate(d *schema.ResourceData, meta inte t, _ := time.Parse(time.RFC3339, startingPositionTimestamp.(string)) params.StartingPositionTimestamp = aws.Time(t) } + + if topics, ok := d.GetOk("topics"); ok && topics.(*schema.Set).Len() > 0 { + params.Topics = expandStringSet(topics.(*schema.Set)) + } + if parallelizationFactor, ok := d.GetOk("parallelization_factor"); ok { params.ParallelizationFactor = aws.Int64(int64(parallelizationFactor.(int))) } @@ -253,9 +265,8 @@ func resourceAwsLambdaEventSourceMappingCreate(d *schema.ResourceData, meta inte return fmt.Errorf("Error creating Lambda event source mapping: %s", err) } - // No error - d.Set("uuid", eventSourceMappingConfiguration.UUID) d.SetId(aws.StringValue(eventSourceMappingConfiguration.UUID)) + return resourceAwsLambdaEventSourceMappingRead(d, meta) } @@ -298,6 +309,9 @@ func resourceAwsLambdaEventSourceMappingRead(d *schema.ResourceData, meta interf if err := d.Set("destination_config", flattenLambdaEventSourceMappingDestinationConfig(eventSourceMappingConfiguration.DestinationConfig)); err != nil { return fmt.Errorf("error setting destination_config: %s", err) } + if err := d.Set("topics", flattenStringSet(eventSourceMappingConfiguration.Topics)); err != nil { + return fmt.Errorf("error setting topics: %s", err) + } state := aws.StringValue(eventSourceMappingConfiguration.State) diff --git a/aws/resource_aws_lambda_event_source_mapping_test.go b/aws/resource_aws_lambda_event_source_mapping_test.go index f4e7c7d65af..64bfdaccbe5 100644 --- a/aws/resource_aws_lambda_event_source_mapping_test.go +++ b/aws/resource_aws_lambda_event_source_mapping_test.go @@ -62,6 +62,7 @@ func TestAccAWSLambdaEventSourceMapping_kinesis_basic(t *testing.T) { resource.TestCheckResourceAttrPair(resourceName, "function_arn", functionResourceNameUpdated, "arn"), resource.TestCheckResourceAttrPair(resourceName, "event_source_arn", eventSourceResourceName, "arn"), resource.TestCheckResourceAttr(resourceName, "starting_position", "TRIM_HORIZON"), + resource.TestCheckResourceAttr(resourceName, "topics.#", "0"), ), }, }, @@ -621,6 +622,39 @@ func TestAccAWSLambdaEventSourceMapping_KinesisDestinationConfig(t *testing.T) { }) } +func TestAccAWSLambdaEventSourceMapping_MSK(t *testing.T) { + var v lambda.EventSourceMappingConfiguration + resourceName := "aws_lambda_event_source_mapping.test" + eventSourceResourceName := "aws_msk_cluster.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckLambdaEventSourceMappingDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSLambdaEventSourceMappingConfigMsk(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAwsLambdaEventSourceMappingExists(resourceName, &v), + testAccCheckAWSLambdaEventSourceMappingAttributes(&v), + resource.TestCheckResourceAttrPair(resourceName, "event_source_arn", eventSourceResourceName, "arn"), + testAccCheckResourceAttrRfc3339(resourceName, "last_modified"), + resource.TestCheckNoResourceAttr(resourceName, "starting_position"), + resource.TestCheckResourceAttr(resourceName, "topics.#", "1"), + resource.TestCheckTypeSetElemAttr(resourceName, "topics.*", "test"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"enabled", "starting_position"}, + }, + }, + }) +} + func testAccCheckAWSLambdaEventSourceMappingIsBeingDisabled(conf *lambda.EventSourceMappingConfiguration) resource.TestCheckFunc { return func(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).lambdaconn @@ -1527,3 +1561,122 @@ resource "aws_lambda_event_source_mapping" "test" { } `, batchWindow)) } + +func testAccAWSLambdaEventSourceMappingConfigMsk(rName string) string { + return composeConfig(testAccAvailableAZsNoOptInConfig(), fmt.Sprintf(` +resource "aws_iam_role" "test" { + name = %[1]q + + assume_role_policy = <