EventBridge to Lambda: Handling burst traffic for Genesys interaction events

We’ve configured EventBridge rules to capture Genesys Cloud interaction events and route them to a Lambda function for downstream processing. The setup works fine during low traffic, but we are seeing throttling when call volumes spike. The Lambda function hits its concurrency limit, causing EventBridge to retry and eventually drop events after the dead-letter queue fills up.

The current handler in Python looks something like this:

def lambda_handler(event, context):
 for record in event['detail']:
 process_interaction(record)
 return {'statusCode': 200}

We are not batching the events properly in the handler, and the default concurrency is too low for our peak hours. We’ve tried increasing the reserved concurrency in the AWS console, but it feels like a band-aid solution. Is there a recommended pattern for batching these events or configuring EventBridge to fan out to multiple Lambda functions? We need to ensure no events are lost during high-volume periods.

Any advice on adjusting the batch size or using Step Functions for better throughput would be appreciated.

Thinking about the concurrency spike, maybe EventBridge isn’t the best fit here if you can’t scale Lambda fast enough. Have you looked at using SQS as a buffer? It acts as a shock absorber. You point the EventBridge rule to an SQS queue instead of directly to Lambda. Then, configure the Lambda to poll that queue. This decouples the ingestion from the processing. You’ll need to handle batch processing in the handler to keep costs down.

Here’s how the handler might look:

def lambda_handler(event, context):
 # Process records in batches
 for record in event['Records']:
 body = json.loads(record['body'])
 # Your logic here
 process_interaction(body)
 return {'statusCode': 200}

This way, you control the batch size and retry logic. The queue holds the burst, and Lambda processes at its own pace. You’ll need to enable dead-letter queues on the SQS side too, just in case. It’s a bit more setup, but it stops the dropping events issue.