DEV Community

Kunal Shah
Kunal Shah

Posted on

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

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

AWS Cloud Hands on Lab Practice Series

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 #lambda #dynamodb #sqs #serverless #infrastructure

You can reach out to me @ acloudguy.in

Image of Stellar post

🚀 Stellar Dev Diaries Series: Episode 1 is LIVE!

Ever wondered what it takes to build a web3 startup from scratch? In the Stellar Dev Diaries series, we follow the journey of a team of developers building on the Stellar Network as they go from hackathon win to getting funded and launching on mainnet.

Read more

Top comments (0)

Image of Stellar post

Check out Episode 1: How a Hackathon Project Became a Web3 Startup 🚀

Ever wondered what it takes to build a web3 startup from scratch? In the Stellar Dev Diaries series, we follow the journey of a team of developers building on the Stellar Network as they go from hackathon win to getting funded and launching on mainnet.

Read more

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay