+1

Amazon API Gateway HTTP API to AWS Simple Queue Service (SQS) to Lambda

This pattern creates an Amazon API Gateway HTTP API with a send route that send message to a SQS queue. The Amazon API Gateway HTTP API has basic CORS configured. Upon receiving message, SQS will trigger a Lambda function to process the message. The function will only print the message only. The function written in Python.

Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/apigw-http-sqs-lambda-cdk

Important: this application uses various AWS services and there are costs associated with these services after the Free Tier usage - please see the AWS Pricing page for details. You are responsible for any AWS costs incurred. No warranty is implied in this example.

Requirements

Deployment Instructions

  1. Create a new directory, navigate to that directory in a terminal and clone the GitHub repository:

    git clone https://github.com/aws-samples/serverless-patterns
    
  2. Change directory to the pattern directory:

    cd apigw-http-api-sqs-lambda-cdk
    
  3. Create virtualenv

    python3 -m venv .venv
    
  4. Activate your virtualenv.

    source .venv/bin/activate
    
  5. Once the virtualenv is activated, you can install the required dependencies.

    pip install -r requirements.txt
    
  6. At this point you can now synthesize the CloudFormation template for this code.

    cdk synth
    

    Useful CDK commands

    • cdk ls list all stacks in the app
    • cdk synth emits the synthesized CloudFormation template
    • cdk deploy deploy this stack to your default AWS account/region
    • cdk diff compare deployed stack with current state
    • cdk docs open CDK documentation
  7. Deploy CDK stack

    cdk deploy
    

How it works

The API Gateway handles the incoming API requests and send the $request.body.MessageBody as a message to SQS queue. A Lambda function will be trigger upon the message arraived.

Testing

Running following cURL command to agaist the HTTP API Endpoint

curl -XPOST https://${HTTP_API_ENDPOOINT}/send -d'{"MessageBody":"hello"}'

Expected result

<?xml version="1.0"?><SendMessageResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/">
    <SendMessageResult>
        <MessageId>xxxxxx</MessageId>
        <MD5OfMessageBody>xxxxxx</MD5OfMessageBody>
    </SendMessageResult>
    <ResponseMetadata>
        <RequestId>xxxx</RequestId>
    </ResponseMetadata>
</SendMessageResponse>

Cleanup

cdk destroy


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.