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
- Create an AWS account if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources.
- AWS CLI installed and configured
- Git Installed
- AWS Cloud Development Kit (AWS CDK) installed
- Python 3.8+ Installed
Deployment Instructions
-
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 -
Change directory to the pattern directory:
cd apigw-http-api-sqs-lambda-cdk -
Create virtualenv
python3 -m venv .venv -
Activate your virtualenv.
source .venv/bin/activate -
Once the virtualenv is activated, you can install the required dependencies.
pip install -r requirements.txt -
At this point you can now synthesize the CloudFormation template for this code.
cdk synthUseful CDK commands
cdk lslist all stacks in the appcdk synthemits the synthesized CloudFormation templatecdk deploydeploy this stack to your default AWS account/regioncdk diffcompare deployed stack with current statecdk docsopen CDK documentation
-
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
Nguồn: viblo.asia
