Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork60
This repository provides a working, deployable, open source-based, serverless service blueprint with an AWS Lambda function and AWS CDK Python code with all the best practices and a complete CI/CD pipeline.
License
ran-isenberg/aws-lambda-handler-cookbook
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This project provides a working, open source based, AWS Lambda handler skeleton Python code includingx DEPLOYMENT code with CDK and a pipeline.
This project can serve as a blueprint for new Serverless services - CDK deployment code, pipeline and handler are covered.
Contact details |mailto:ran.isenberg@ranthebuilder.cloud
This repository was recommended in an AWS blog postBest practices for accelerating development with serverless blueprints
I spoke at AWS re:invent 2023 with Heitor Lessa, former Chief Architect of Powertools for AWS Lambda about the concepts I implemented in this project.
You can start with a clean service out of this blueprint repository without using the 'Template' button on GitHub.
You can use Cookiecutter.
- Cookiecutter - install with pip/brew
brew install cookiecutterorpip install cookiecutter
Then run:
cookiecutter gh:ran-isenberg/cookiecutter-serverless-python
Answer the questions to select repo name, service name, etc.:
That's it, your developer environment has been set! you are ready to deploy the service:
cd {new repo folder}poetry env activatemake deployMake sure you have poetry v2 and above.
You can also run 'make pr' will run all checks, synth, file formatters , unit tests, deploy to AWS and run integration and E2E tests.
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 write a Lambda function?
- 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 blueprint that implements best practices for AWS Lambda, Serverless CI/CD, and AWS CDK in one blueprint 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 with python linters, complexity checks and style formatters.
- CI/CD pipeline deploys to dev/staging and production environments with different gates between each environment
- Makefile for simple developer experience.
- The AWS Lambda handler embodies Serverless best practices and has all the bells and whistles for a proper production ready handler.
- AWS Lambda handler usesAWS Lambda Powertools.
- AWS Lambda handler 3 layer architecture: handler layer, logic layer and data access layer
- Features flags and configuration based on AWS AppConfig
- Idempotent API
- REST API protected by WAF with four AWS managed rules in production deployment
- CloudWatch dashboards - High level and low level including CloudWatch alarms
- Unit, infrastructure, security, integration and end to end tests.
- Automatically generated OpenAPI endpoint: /swagger with Pydantic schemas for both requests and responses
- CI swagger protection - fails the PR if your swagger JSON file (stored at docs/swagger/openapi.json) is out of date
- Automated protection against API breaking changes
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
- Serverless Monitoring
- API Idempotency
- Serverless OpenAPI Documentation with AWS Powertools
Head over to the complete project documentation pages at GitHub pages athttps://ran-isenberg.github.io/aws-lambda-handler-cookbook
Code contributions are welcomed. Read thisguide.
Read our code of conducthere.
- Email:ran.isenberg@ranthebuilder.cloud
- Blog:https://www.ranthebuilder.cloud
- Bluesky:@ranthebuilder.cloud
- X:@RanBuilder
- LinkedIn:https://www.linkedin.com/in/ranbuilder/
This library is licensed under the MIT License. See theLICENSE file.
About
This repository provides a working, deployable, open source-based, serverless service blueprint with an AWS Lambda function and AWS CDK Python code with all the best practices and a complete CI/CD pipeline.
Topics
Resources
License
Code of conduct
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors5
Uh oh!
There was an error while loading.Please reload this page.





