Key | Value |
---|---|
Environment | |
Services | API Gateway, DynamoDB, SQS, Lambda |
Integrations | CDK |
Categories | Serverless; Microservices |
Level | Beginner |
GitHub | Repository link |
The Serverless microservices application sample demonstrates how you can build and deploy a solution for friend microservices in gaming applications using API Gateway, Lambda, DynamoDB, and SQS. This application sample allows you to handle friend state management asynchronously and utilizes DynamoDB Streams with Event Source Mapping Filters to reduce the number of transactional writes. With an SQS queue, multiple backend services can send friend actions and handle duplicated messages using Event Source Mapping Filters. An API Gateway and a Lambda Function have been implemented to read the data and DynamoDB for data persistence. The sample is decoupled from player management and only serves friend state management. Users can deploy the infrastructure with AWS Cloud Development Kit, and we will demonstrate how you use LocalStack to deploy the infrastructure on your developer machine and your CI environment.
We are using the following AWS services and their features to build our infrastructure:
- Lambda to create the serverless functions for the Create, State, and Read handlers.
- SQS as a distributed message queuing service to intakes all friend actions from game backend services.
- DynamoDB as a key-value and document database to persist data with Event Source Mapping Filters to reduce number of transactional writes.
- API Gateway to expose and allow the Lambda functions to read data through HTTP APIs.
- LocalStack Pro
- AWS CLI with the
awslocal
wrapper. - CDK with the
cdklocal
wrapper. - NodeJS v18.0.0 with
npm
package manager.
Start LocalStack Pro by setting your LOCALSTACK_AUTH_TOKEN
to activate the Pro features.
export LOCALSTACK_AUTH_TOKEN=<your-api-key>
EXTRA_CORS_ALLOWED_ORIGINS=* localstack start -d
You can build and deploy the sample application on LocalStack by running our Makefile
commands. To deploy the infrastructure, you can run make deploy
after installing the application dependencies. Here are instructions to deploy and test it manually step-by-step.
To create the AWS infrastructure locally, you can use CDK and our cdklocal
wrapper. Before you can deploy the infrastructure, you need to install the application dependencies:
yarn
To deploy the infrastructure, you can run the following command:
cdklocal bootstrap aws://000000000000/us-east-1
cdklocal deploy
Note: Make sure your region is set to us-east-1
in your AWS CLI configuration. Alternatively you can adjust the bootstrap command to match your region.
The region in the Makefile is also set to us-east-1
and might need changing.
As an output of the last command, you will see the API Gateway endpoint URL. You can use this URL to test the API.
To test the microservice, we will send Friend Action Events to the front SQS queue. We will use the AWS CLI to send the events to the queue. To get the Queue URL, you can run the following command:
awslocal sqs list-queues
Get the URL of the Front Queue and use the following commands to send a friend request event:
awslocal sqs send-message-batch --queue-url <QUEUE_URL> --entries file://test/testMessagesFirst.json
awslocal sqs send-message-batch --queue-url <QUEUE_URL> --entries file://test/testMessagesSecond.json
awslocal sqs send-message-batch --queue-url <QUEUE_URL> --entries file://test/testMessagesThird.json
To test corner cases, you can send the following messages to the queue:
awslocal sqs send-message-batch --queue-url <QUEUE_URL> --entries file://test/cornerCase1.json
awslocal sqs send-message-batch --queue-url <QUEUE_URL> --entries file://test/cornerCase2.json
To test the microservice now, send the following command using cURL
:
curl -X GET 'https://<LOCAL_APIGATEWAY_ENDPOINT>/friends/player1'
curl -X GET 'https://<LOCAL_APIGATEWAY_ENDPOINT>/friends/player2'
curl -X GET 'https://<LOCAL_APIGATEWAY_ENDPOINT>/friends/player3'
To run the unit tests, you can run the following command:
yarn test
This application sample hosts an example GitHub Action workflow that starts up LocalStack, deploys the infrastructure, and checks the created resources using awslocal
. You can find the workflow in the .github/workflows/main.yml
file. To run the workflow, you can fork this repository and push a commit to the main
branch.
Users can adapt this example workflow to run in their own CI environment. LocalStack supports various CI environments, including GitHub Actions, CircleCI, Jenkins, Travis CI, and more. You can find more information about the CI integration in the LocalStack documentation.
The sample application is based on a public AWS sample app that deploys a friend microservice for gaming applications.
We appreciate your interest in contributing to our project and are always looking for new ways to improve the developer experience. We welcome feedback, bug reports, and even feature ideas from the community. Please refer to the contributing file for more details on how to get started.