This project provides a working, open source based, AWS Lambda handler skeleton Python code including DEPLOYMENT code with CDK and a pipeline.
This project can serve as a template for new Serverless services - CDK deployment code, pipeline and handler are covered.
📜Documentation | Blogs website
Contact details | ran.isenberg@ranthebuilder.cloud
Starting a Serverless service can be overwhelming. You need to figure out many questions and challenges that have nothing to do with your business domain:
- How to deploy to the cloud? What IAC framework do you choose?
- How to write a SaaS-oriented CI/CD pipeline? What does it need to contain?
- How do you handle observability. Logging, tracing, metrics
- How do you handle testing?
- What makes an AWS Lambda handler resilient, traceable, and easy to maintain? How do you write such a code?
This project aims to reduce cognitive load and answer these questions for you by providing a skeleton Python Serverless service template
that implements best practices for AWS Lambda, Serverless CI/CD, and AWS CDK in one template project.
-
This project provides a working orders service where customers can create orders of items.
-
The project deploys an API GW with an AWS Lambda integration under the path POST /api/orders/ and stores data in a DynamoDB table.
- Python Serverless service with a recommended file structure.
- CDK infrastructure with infrastructure tests and security tests.
- CI/CD pipelines based on Github actions that deploys to AWS.
- Unit/integration and E2E tests.
- The AWS Lambda handler embodies Serverless best practices and has all the bells and whistles for a proper production ready handler.
The GitHub template project can be found at https://github.com/ran-isenberg/aws-lambda-handler-cookbook.
The CDK code create an API GW with a path of /api/orders which triggers the lambda on 'POST' requests.
The AWS Lambda handler uses a Lambda layer optimization which takes all the packages under the [packages] section in the Pipfile and downloads them in via a Docker instance.
This allows you to package any custom dependencies you might have, just add them to the Pipfile under the [packages] section.
The AWS Lambda handler will implement multiple best practice utilities.
Each utility is implemented when a new blog post is published about that utility.
The utilities cover multiple aspect of a production-ready service, including:
- Logging
- Observability: Monitoring and Tracing
- Observability: Business KPIs Metrics
- Environment Variables
- Input Validation
- Dynamic Configuration & feature flags
- Start Your AWS Serverless Service With Two Clicks
- CDK Best practices
I've written 3 of the mentioned utilities (parser, feature flags and environment variables) and donated two of them, the parser and feature flags to AWS Lambda Powertools.
While the code examples are written in Python, the principles are valid to any supported AWS Lambda handler programming language.
This repository is the complementary code examples of my blog series "AWS Lambda Cookbook - Elevate your handler's code"
Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-handler-cookbook
Code contributions are welcomed. Read this guide.
Read our code of conduct here.
- Email: ran.isenberg@ranthebuilder.cloud
- Blog Website RanTheBuilder
- LinkedIn: ranisenberg
- Twitter: IsenbergRan
This library is licensed under the MIT License. See the LICENSE file.