Created by Jens Roland and fueled by a non-zero amount of alcohol
Kegstand is a free and open-source framework for creating Python APIs and services. It allows you to rapidly build and deploy services on AWS. We all have better things to do than print(json.dumps(event))
all day long, and Kegstand is here to help you get to the party — and into Prod — a lot faster.
It provides:
- A CLI tool for creating and deploying your services.
- A decorator based API abstracting away the boilerplate of Lambda, API Gateway, Cognito, and more.
- The full power of CDK to define and deploy arbitrary AWS resources with your services.
"Experience a streamlined cloud development process, enhanced productivity, and hit that "party" button sooner with Kegstand!" > — GPT-4, official spokesbot for the Kegstand team
Learn more on the Kegstand website.
- Python 3.8+
- Poetry (recommended)
- An AWS account
- The CDK CLI configured on the local machine and initialized on the AWS account
- The AWS CLI configured with credentials
- Copier project scaffolding tool (recommended)
- npx for installing CLI tools (recommended)
- A well-poured Belgian style brown ale
To create a service with Kegstand, you'll need a Python project with a few dependencies and a folder structure following the Kegstand convention.
You can create this in a few seconds, either with the Kegstand CLI or using Copier.
# Using the Kegstand CLI
> pipx install kegstandcli
> keg new my-service
# Using Copier
> copier copy -d project_name=my-service gh:JensRoland/kegstand-project-template .
Either method will create a new project folder called my-service
containing:
my-service
├── .gitignore # Standard .gitignore file
├── pyproject.toml # Project configuration
└── src
└── api
└── public
└── hello.py # Logic for /hello/
Kegstand projects are minimal by design, so a fresh project folder contains just those 3 files. Well, apart from a few empty __init__.py
gatecrashers, but we can safely ignore those.
To install the dependencies for the new project:
> cd my-service
> poetry install
Finally, to build and deploy the service to AWS:
> poetry run keg deploy
You should now be able to access the API endpoint at https://<api-id>.execute-api.<region>.amazonaws.com/prod/hello
.
For further examples and more advanced usage, see the official documentation.
Here are some notable changes, fixes and features that are planned for development:
- More content on kegstand.dev
- Custom domain names
- Support multiple repos using the same domain (and API Gateway)
- Simplify the folder structure from
src/api/resources/<resource-name>/<method>.py
tosrc/api/<resource-name>.py
- Specify event triggers for Lambda functions: S3, SNS, SQS, DynamoDB, Cloudwatch CRON scheduled events, etc.
- Pagination helper
- Record a screencast for the README
- Autogenerated docs using MkDocs
- GitHub Actions workflow for pushing docs to the website
- Intuitive and mostly automated API Versioning
- Simple way to define/override core API/Lambda properties such as CPU/MEM, Python runtime version, warm pool (!), and concurrency
- Deploy Lambda-only microservices with no API Gateway
- Configurable log level
- Add AWS tags in the Kegstand config and they will be applied to the generated resources
- Easily add AWS Lambda Layers
- Add support for APIs using FastAPI with Mangum instead of the default Kegstand API framework, and just provide deployment helpers for the API Gateway and Lambda
- Improved output from deploy command; friendly post-deploy instructions for testing your API
- Version bumper with bump2version
- Include more goodies from Lambda Powertools - tracing, metrics, etc.
- Add support for APIs using pure Lambda Powertools instead of the default Kegstand API framework, and just provide deployment helpers for the API Gateway and Lambda
- Unit testing helpers (wrap moto and make it all a little more DRY and intuitive)
- Secure endpoints which require re-authentication (and/or MFA) so a refreshed token isn’t enough (to, say, delete your account or change your credit card info)
- Live Lambda development a la SST
- Build and deploy gRPC endpoints (or similar alternative)
- Build and deploy GraphQL endpoints
- Build and deploy stream processors?
- Option to teardown before deploying:
keg deploy --force-redeploy
- Use env vars to populate values in kegstand.toml
- Merge Kegstand and Beth into one tool
- CDK Pipelines
- Support HTTP method-specific files (e.g.
get.py
,post.py
, etc.) - Upgrade Copier once the template-deleting bugfix is released