From 9c30645f7547b586ec877b6bedc5f9269c96917c Mon Sep 17 00:00:00 2001 From: Florian Akos Szabo Date: Fri, 28 Nov 2025 15:20:55 +0200 Subject: [PATCH 1/2] fix: add missing poller_group_name to Lambda ESM provisioned_poller_config --- .../service/lambda/event_source_mapping.go | 14 ++++++++++++++ .../lambda/event_source_mapping_test.go | 18 ++++++++++++++---- .../lambda_event_source_mapping.html.markdown | 2 ++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/internal/service/lambda/event_source_mapping.go b/internal/service/lambda/event_source_mapping.go index e52aef66ecd0..8d34008ca9bb 100644 --- a/internal/service/lambda/event_source_mapping.go +++ b/internal/service/lambda/event_source_mapping.go @@ -281,6 +281,12 @@ func resourceEventSourceMapping() *schema.Resource { Computed: true, ValidateFunc: validation.IntBetween(1, 200), }, + "poller_group_name": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateFunc: validation.StringLenBetween(1, 128), + }, }, }, }, @@ -1277,6 +1283,10 @@ func expandProvisionedPollerConfig(tfMap map[string]any) *awstypes.ProvisionedPo apiObject.MinimumPollers = aws.Int32(int32(v)) } + if v, ok := tfMap["poller_group_name"].(string); ok && v != "" { + apiObject.PollerGroupName = aws.String(v) + } + return apiObject } @@ -1295,6 +1305,10 @@ func flattenProvisionedPollerConfig(apiObject *awstypes.ProvisionedPollerConfig) tfMap["minimum_pollers"] = aws.ToInt32(v) } + if v := apiObject.PollerGroupName; v != nil { + tfMap["poller_group_name"] = aws.ToString(v) + } + return tfMap } diff --git a/internal/service/lambda/event_source_mapping_test.go b/internal/service/lambda/event_source_mapping_test.go index 508f64373c1f..8af523a0ff27 100644 --- a/internal/service/lambda/event_source_mapping_test.go +++ b/internal/service/lambda/event_source_mapping_test.go @@ -1283,12 +1283,13 @@ func TestAccLambdaEventSourceMapping_selfManagedKafkaWithProvisionedPollerConfig CheckDestroy: testAccCheckEventSourceMappingDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig(rName, "100", "test1:9092,test2:9092", "123", "null"), + Config: testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig(rName, "100", "test1:9092,test2:9092", "123", "null", "null"), Check: resource.ComposeTestCheckFunc( testAccCheckEventSourceMappingExists(ctx, resourceName, &v), resource.TestCheckResourceAttr(resourceName, "provisioned_poller_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "provisioned_poller_config.0.maximum_pollers", "123"), resource.TestCheckResourceAttrSet(resourceName, "provisioned_poller_config.0.minimum_pollers"), + resource.TestCheckResourceAttrSet(resourceName, "provisioned_poller_config.0.poller_group_name"), ), }, { @@ -1298,12 +1299,13 @@ func TestAccLambdaEventSourceMapping_selfManagedKafkaWithProvisionedPollerConfig ImportStateVerifyIgnore: []string{"last_modified"}, }, { - Config: testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig(rName, "100", "test1:9092,test2:9092", "150", "15"), + Config: testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig(rName, "100", "test1:9092,test2:9092", "150", "15", "group-name-123"), Check: resource.ComposeTestCheckFunc( testAccCheckEventSourceMappingExists(ctx, resourceName, &v), resource.TestCheckResourceAttr(resourceName, "provisioned_poller_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "provisioned_poller_config.0.maximum_pollers", "150"), resource.TestCheckResourceAttr(resourceName, "provisioned_poller_config.0.minimum_pollers", "15"), + resource.TestCheckResourceAttr(resourceName, "provisioned_poller_config.0.poller_group_name", "group-name-123"), ), }, { @@ -2840,6 +2842,7 @@ resource "aws_lambda_event_source_mapping" "test" { provisioned_poller_config { maximum_pollers = 100 minimum_pollers = 1 + poller_group_name = "test-group" } amazon_managed_kafka_event_source_config { @@ -2899,6 +2902,7 @@ resource "aws_lambda_event_source_mapping" "test" { provisioned_poller_config { maximum_pollers = 100 minimum_pollers = 1 + poller_group_name = "test-group" } amazon_managed_kafka_event_source_config { @@ -3011,6 +3015,7 @@ resource "aws_lambda_event_source_mapping" "test" { provisioned_poller_config { maximum_pollers = 100 minimum_pollers = 1 + poller_group_name = "test-group" } self_managed_kafka_event_source_config { @@ -3067,6 +3072,7 @@ resource "aws_lambda_event_source_mapping" "test" { provisioned_poller_config { maximum_pollers = 100 minimum_pollers = 1 + poller_group_name = "test-group" } self_managed_kafka_event_source_config { @@ -3105,7 +3111,7 @@ resource "aws_lambda_event_source_mapping" "test" { `) } -func testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig(rName, batchSize, kafkaBootstrapServers, maxPollers, minPollers string) string { +func testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig(rName, batchSize, kafkaBootstrapServers, maxPollers, minPollers, pollerGroupName string) string { if batchSize == "" { batchSize = "null" } @@ -3115,6 +3121,9 @@ func testAccEventSourceMappingConfig_selfManagedKafkaWithProvisionedPollerConfig if minPollers == "" { minPollers = "null" } + if pollerGroupName == "" { + pollerGroupName = "null" + } return acctest.ConfigCompose(testAccEventSourceMappingConfig_kafkaBase(rName), fmt.Sprintf(` resource "aws_lambda_event_source_mapping" "test" { @@ -3146,9 +3155,10 @@ resource "aws_lambda_event_source_mapping" "test" { provisioned_poller_config { maximum_pollers = %[4]s minimum_pollers = %[5]s + poller_group_name = %[6]s } } -`, rName, batchSize, kafkaBootstrapServers, maxPollers, minPollers)) +`, rName, batchSize, kafkaBootstrapServers, maxPollers, minPollers, pollerGroupName)) } func testAccEventSourceMappingConfig_dynamoDBBatchSize(rName, batchSize string) string { diff --git a/website/docs/r/lambda_event_source_mapping.html.markdown b/website/docs/r/lambda_event_source_mapping.html.markdown index 3260f1086d1f..cb6258b32bf1 100644 --- a/website/docs/r/lambda_event_source_mapping.html.markdown +++ b/website/docs/r/lambda_event_source_mapping.html.markdown @@ -133,6 +133,7 @@ resource "aws_lambda_event_source_mapping" "example" { provisioned_poller_config { maximum_pollers = 100 minimum_pollers = 10 + poller_group_name = "group-123" } } ``` @@ -266,6 +267,7 @@ The following arguments are optional: * `maximum_pollers` - (Optional) Maximum number of event pollers this event source can scale up to. The range is between 1 and 2000. * `minimum_pollers` - (Optional) Minimum number of event pollers this event source can scale down to. The range is between 1 and 200. +* `poller_group_name` - (Optional) The name of the provisioned poller group used to group multiple ESMs within the event source's VPC to share Event Poller Unit (EPU) capacity. You can use this option to optimize Provisioned mode costs for your ESMs. You can group up to 100 ESMs per poller group and aggregate maximum pollers across all ESMs in a group cannot exceed 2000. ### scaling_config Configuration Block From d8f00ab3376a4ab95fc05a192fd8e951d405ecc6 Mon Sep 17 00:00:00 2001 From: Florian Akos Szabo Date: Fri, 28 Nov 2025 15:28:36 +0200 Subject: [PATCH 2/2] fix: add changelog entry for PR --- .changelog/45313.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/45313.txt diff --git a/.changelog/45313.txt b/.changelog/45313.txt new file mode 100644 index 000000000000..909180c2c31f --- /dev/null +++ b/.changelog/45313.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_lambda_event_source_mapping: extend `provisioned_poller_config` with optional string param `poller_group_name` +```