Monday, August 11, 2025

How to Invoke Lambda Functions from RDS & Aurora.

 

Invoking AWS Lambda functions from RDS (Relational Database Service) and Aurora is a powerful pattern to extend your database capabilities with serverless compute, event-driven workflows, or custom logic.

A deep dive on how this can be done, including approaches, architecture, pros/cons, and example use cases.

1. Background concept: Why Invoke Lambda from RDS/Aurora.

  •         Extend database capabilities: Add complex processing, notifications, or integration logic without embedding it in the database.
  •         Event-driven workflows: Trigger downstream processes when data changes.
  •         Serverless architecture: Keep compute separate from the database, scaling independently.
  •         Avoid polling: Lambda can be invoked on demand instead of frequent database checks.

2. Direct Lambda Invocation Options

Unfortunately, RDS databases (MySQL, PostgreSQL, etc.) don’t natively support calling Lambda functions directly. But there are indirect ways to trigger Lambdas from Aurora or RDS:

2.1 Using Aurora MySQL / PostgreSQL with AWS Lambda integration

Aurora supports invoking Lambda functions from within the database itself — but this depends on engine/version.

  •         Aurora MySQL supports the aws_lambda integration plugin (from Aurora MySQL 2.08+).
  •         Aurora PostgreSQL supports Lambda invocation using the aws_lambda.invoke function (starting from specific versions).

Aurora MySQL example:

  •         Install and enable the aws_lambda plugin.
  •         Use the aws_lambda.invoke() stored procedure inside SQL to call a Lambda function.

Example SQL:

# sql
CALL aws_lambda.invoke('twtech-LambdaFunction', '{ "key1": "twtech-value11" }');

  •       The Lambda receives the JSON payload and runs your logic.
  •       twtech gets a response back to SQL.

Aurora PostgreSQL example:

twtech can invoke Lambda by calling the aws_lambda.invoke_lambda() function (depends on version).

Example SQL:

# sql
SELECT aws_lambda.invoke_lambda('twtech-LambdaFunction', '{"param":"twtech-value1"}');

2.2 Using RDS Proxy with Lambda

  •         RDS Proxy doesn’t invoke Lambda but provides connection pooling to RDS and can be combined with event-driven architectures.

3. Indirect Lambda Invocation (All RDS Engines)

If direct invocation isn’t available or for other RDS engines, you can use event-driven triggers:

3.1 Using Database Triggers + AWS SNS / SQS + Lambda

  •         Create database triggers (e.g., AFTER INSERT/UPDATE/DELETE).
  •         Triggers write a row or a message into a notification table or queue.
  •         A polling Lambda monitors that table or listens to SNS/SQS for changes.
  •         Lambda processes the data asynchronously.

Workflow:

1.     Database trigger → insert event row in notification table.

2.     Lambda polls table or listens on queue.

3.     Lambda processes event.

3.2 Using AWS DMS (Database Migration Service) + Lambda

  •         AWS DMS can capture ongoing changes in RDS/Aurora (CDC - Change Data Capture).
  •         DMS streams changes to Amazon Kinesis or S3.
  •         Lambda reads from Kinesis/S3 and acts on changes.

3.3 Using AWS EventBridge + Lambda

  •         For Aurora Serverless v2, you can enable database activity streams.
  •         Stream events to EventBridge.
  •         Lambda triggers on EventBridge events.

3.4 Using Custom Polling (cron + Lambda)

  •         Lambda runs periodically (scheduled via EventBridge).
  •         Lambda queries the database for changes.
  •        Processes results.

4. Setup Details for Aurora MySQL Lambda Invocation

Step 1: Enable aws_lambda plugin

# sql
CALL mysql.rds_enable_lambda_integration();

Check with:

# sql
SHOW PLUGINS;

Step 2: Create IAM Role for Aurora to invoke Lambda

  •         Create an IAM role with Lambda invocation permissions.
  •         Attach the IAM role to twtech Aurora cluster.

Step 3: Create your Lambda function

  •         Create the Lambda function twtech wants to invoke.
  •         Test independently with sample input.

Step 4: Invoke Lambda from SQL

# sql 
SELECT aws_lambda.invoke('twtech-Lambda', '{ "key": "twtech-value1" }');

5. Security Considerations

  •         IAM permissions must be correctly set: Aurora RDS instance profile needs lambda:InvokeFunction permissions.
  •         Network: Lambda and Aurora should be in the same VPC or Lambda must have access to the Aurora endpoint.
  •         Least privilege principle: limit IAM permissions and Lambda access.
  •         Validate inputs/outputs carefully to avoid injection attacks or failures.

6. Pros and Cons

Approach

Pros(Benefits)

Cons(Limitations)

Aurora MySQL/PostgreSQL direct.

Fast, synchronous, native invocation.

Only for Aurora, requires specific versions

Database triggers + polling.

Works for all RDS engines.

Higher latency, complexity in polling and retries

DMS + Kinesis + Lambda.

Near real-time, decoupled.

More moving parts, configuration overhead

EventBridge + DB activity streams.

Serverless, scalable.

Aurora Serverless only, limited to supported engines.

Scheduled Lambda polling.

Simple to implement.

Inefficient, higher latency.

7. Example Use Cases

  •         Data validation or transformation upon insert/update.
  •         Sending notifications or pushing data to external systems on DB events.
  •         Auditing and logging asynchronously.
  •         Complex business logic that is better handled outside the DB.
  •         Data enrichment or calling external APIs on DB changes.

Summary

RDS/Aurora Engine

Direct Lambda Invocation

Notes

Aurora MySQL.

Yes, via aws_lambda plugin.

From Aurora MySQL 2.08+

Aurora PostgreSQL.

Yes, via aws_lambda.invoke_lambda function.

From supported versions

RDS MySQL/PostgreSQL.

No.

Use triggers + queues or DMS

Others (SQL Server, Oracle).

No.

Use external event-driven patterns



No comments:

Post a Comment

AWS DynamoDB | Read/Write Capacity Modes.

  In Amazon DynamoDB, Read/Write Capacity Mode s determine how twtech pays for throughput and how DynamoDB allocates resources to serve ...