EventBridge Lambda concurrency limits with Genesys Cloud interactions

Genesys Cloud interaction events are flooding EventBridge and maxing out our Lambda concurrency. The default trigger sends individual events, which is too slow for our volume. We’ve tried increasing reserved concurrency, but it’s not scaling fast enough. Is there a way to batch these events via the EventBridge rule configuration or do we need to switch to SQS fan-out? Here’s the current trigger setup:

{
 "Source": "arn:aws:events:...",
 "DetailType": "Genesys Cloud Interaction"
}

Nothing in the docs mentions batching options.

The issue isn’t the Genesys side. It’s how EventBridge handles the fan-out. You can’t batch events at the source in Genesys Cloud. The interactions API sends discrete webhooks. If you’re hitting Lambda limits, you’re fighting the architecture.

Switch to SQS as the target for the EventBridge rule. It’s not a “fan-out” in the traditional sense, it’s a buffer.

  1. Create an SQS queue. Set Maximum Receipients to 1 if you want sequential processing, or leave it default for parallel.
  2. Update your EventBridge rule target to that SQS queue.
  3. Have your Lambda poll the SQS queue. Enable Batch Size in the Lambda trigger configuration. Set it to 10 or 100 depending on your payload size.

Here is the Terraform to wire the EventBridge rule to SQS instead of Lambda directly:

resource "aws_sqs_queue" "genesys_events" {
 name = "genesys-interaction-events"
 visibility_timeout_seconds = 300
 receive_wait_time_seconds = 10 # Use long polling
}

resource "aws_cloudwatch_event_rule" "genesys_interaction" {
 name = "gen-interaction-capture"
 description = "Capture Genesys Interaction Events"

 event_pattern = jsonencode({
 source = ["com.genesys.interactions"]
 detail-type = ["Genesys Cloud Interaction Created"]
 })
}

resource "aws_cloudwatch_event_target" "genesys_to_sqs" {
 rule = aws_cloudwatch_event_rule.genesys_interaction.name
 target_id = "SendToSQS"
 arn = aws_sqs_queue.genesys_events.arn
}

Then configure the Lambda trigger:

resource "aws_lambda_event_source_mapping" "sqs_to_lambda" {
 event_source_arn = aws_sqs_queue.genesys_events.arn
 function_name = aws_lambda_function.processor.function_name
 batch_size = 10 # Process 10 events at once
 maximum_batching_window = 5 # Wait up to 5 seconds to fill the batch
}

This stops the Lambda concurrency spike. SQS absorbs the burst. Lambda pulls at its own pace. You’ll also get dead letter queue support if a batch fails, which is cleaner than retrying individual Lambda invocations.