Triggering AWS Lambda from Amazon SQS to store data into a DynamoDB Table

AWS Cloud Hands on Lab Practice Series

acloudguy.in
5 min readApr 15, 2023

Project Overview —

To trigger a AWS Lambda function using Amazon SQS. This Lambda function will process messages from the SQS queue and insert the message data as records into a DynamoDB table.

SOLUTIONS ARCHITECTURE OVERVIEW -

First Let's understand the real world use case -

  • E-commerce platform: A Lambda function can be triggered by an SQS queue containing incoming orders, and store them in DynamoDB for later processing. This can help ensure that orders are processed in a timely manner and can help track sales data.
  • Data pipeline: You might have a data pipeline where you’re ingesting large amounts of data from different sources. Using SQS to queue up data to be processed and a Lambda function to process the data and store it in DynamoDB can help simplify the pipeline and make it more efficient.
  • IoT applications: In an IoT application, you may have devices that send data to an SQS queue, such as temperature readings from sensors. A Lambda function can be triggered by the SQS queue to process the data and store it in DynamoDB for analysis.
  • Social media platforms: A Lambda function triggered by an SQS queue can help you process incoming posts, comments or messages in real-time, and store them in DynamoDB for later analysis or processing. This can help provide insights into user engagement, sentiment analysis or trending topics.

Overall, the solution of using a Lambda function triggered by an SQS queue to store records in DynamoDB is a common pattern in building scalable and fault-tolerant distributed systems.

STEP BY STEP GUIDE -

we walk through on how to create the Lambda function and configure it to trigger from SQS. We then use a Python script on an EC2 instance to send a high volume of messages to an SQS queue. We also verify the Lambda function is being invoked and the messages are being saved in DynamoDB.

PREREQUISITE —

  • AWS Account with Admin Access.
  • Linux EC2 Instance with Admin IAM role.

AWS Services Usage —

Lambda, SQS, DynamoDB, EC2, IAM, CloudWatch

STEP 1 :

  • Navigate to AWS IAM.
  • Create a IAM role with name lambda-execution-role
  • Attach below mentioned policies to the role
    - AmazonSQSFullAccess
    - AmazonDynamoDBFullAccess
    - CloudWatchLogsFullAccess
    - AWSLambdaExecute
  • Trust Relationships is for Lambda

STEP 2 :

  • Navigate to AWS SQS.
  • Create standard SQS Queue & Name it “Messages
  • Keep other settings as default.

STEP 3 :

  • Navigate to AWS DynamoDB.
  • Go Tables -> Create Table.
    - Table Name = Message
    - Partition Key = MessageId (String)
    - Table settings = Customize settings
    - Table Class = DynamoDB Standard
    - Read/Write capacity settings = On-demand
    - Encryption at rest = Owned by Amazon DynamoDB
  • Click the Create Table button.

STEP 4 :

  • Navigate to AWS Lambda.
  • Create the Lambda Function.
  • On the Create function page, select Author from scratch.
  • Under Basic Information, set the following parameters for each field:
    - Function name: Enter SQS-DDB.
    - Runtime: Select Python 3.9 from the dropdown menu.
    - Architecture: Select x86_64.
    - Under Permissions, Select Use an existing role.
    - Under Existing role, select lambda-execution-role from the dropdown menu.(created in step 1)
    - Click the Create function button.

STEP 5 :

  • On the Lambda Console our function SQS-DDB is created.
  • Click the + Add trigger button to add SQS Trigger.
  • Under SQS queue, click the search bar and select Messages.(step 2)
  • Ensure that the checkbox next to Activate trigger is checked.
  • Click Add button.

STEP 6 :

  • Double-click on lambda_function.py from under the Code tab section.
  • Copy the Source Code into the Lambda Function from My GitHub Repo.
  • Replace the code contents of the function you copied from Github Repo.
  • After that click the Deploy button.

STEP 7 :

  • Log In to the Linux EC2 Instance which is part of prerequisite.
  • Copy the python script to create fake messages from my Github Repo.
  • Create a generate_fake_message.py file & paste the code in the file.
  • Now run the script as follows to create fake messages which will be pushed to SQS Queue & eventually invoking Lambda Function.
  • ./generate_fake_message.py -q Messages -i 0.1
  • After a few seconds, hit Control + C to stop the command from continuing to run.

STEP 8 :

  • Confirm Messages Were Inserted into the DynamoDB Table.
    - Select the Message table.
    - Click Explore table items and review the list of items that were inserted from our script.
  • We should soon see a spike in the table Number of Messages Received in SQS Queue Monitoring.
  • Congratulations on successfully completing this hands-on AWS lab!
DynamoDB Table — Output
SQS Monitoring — Output
  • Source code & detailed steps can be found at My Github Repo.
  • IMP NOTE — This DEMO/POC might incur some charges if kept active for long time. So please make sure to clean up the environment once done.

I am Kunal Shah, AWS Certified Solutions Architect, helping clients to achieve optimal solutions on the Cloud. Cloud Enabler by choice, DevOps Practitioner having 7+ Years of overall experience in the IT industry.

I love to talk about Cloud Technology, DevOps, Digital Transformation, Analytics, Infrastructure, Dev Tools, Operational efficiency, Serverless, Cost Optimization, Cloud Networking & Security.

#aws #community #builders #devops #sqs #serverless #infrastructure

You can reach out to me @ acloudguy.in

--

--

acloudguy.in

AWS Community Builder | AWS Solutions Architect | Infrastructure | DevOps | Cloud Network & Security | CFT | Terraform | K8s | SysOps | FinOps | Blog | Share