A tool to package Python AWS Lambda functions with zips, Docker containers, and layers.
Project description
lambda-packer
A streamlined tool for managing and packaging Python AWS Lambda functions
Overview
lambda-packer is a command-line tool designed to simplify the process of packaging Python AWS Lambda functions.
It provides an opinionated approach to develop Lambdas using a monorepo, allowing packaging as either zip files or Docker containers,
with shared dependencies packaged as Lambda layers.
Key Features
- Package Lambdas as zip files or Docker containers
- Support for multiple Lambda layers shared across functions
- Simple YAML configuration to manage Lambdas and layers
- Layer packaging with automatic dependency handling
Installation
pip install lambda-packer
Usage
1. Initialize a new repo
The init command creates a basic repository structure for your Lambda functions, including a common folder for shared dependencies, an example Lambda function, and a package_config.yaml file.
lambda-packer init <parent_directory> --lambda-name <lambda_name>
Example:
lambda-packer init my_project --lambda-name my_lambda
This command creates:
my_project/
├── common/
├── my_lambda/
│ ├── lambda_handler.py
│ └── requirements.txt
├── dist/
└── package_config.yaml
2. Configuration
The package_config.yaml file is where you define how to package your Lambdas. You can specify the type of packaging (zip or docker), the Python runtime, and any layers associated with the Lambda.
Example package_config.yaml
lambdas:
my_lambda:
type: zip
runtime: "3.12"
layers:
- common
3. Package Lambda as a Zip
To package a Lambda function (for a zip type Lambda), use the following command:
lambda-packer package my_lambda
This will package the Lambda function and any referenced layers (e.g., common) into a zip file in the dist directory.
4. Package Lambda as a Docker Container
To package a Lambda as a Docker container (for a docker type Lambda), modify the package_config.yaml and set type: docker.
lambdas:
my_lambda:
type: docker
runtime: "3.9"
layers:
- common
Then run:
lambda-packer package my_lambda
The tool will build a Docker image using the specified Python runtime and package the Lambda function.
5. Packaging Lambda Layers
If you need to package shared dependencies (like the common folder) as Lambda layers, you can use the package-layer command:
lambda-packer package-layer common
This command packages the common directory as a Lambda layer and zips it to the dist/ folder.
Available Commands
init <parent_directory> --lambda-name <lambda_name>: Initialize a new monorepo with a common folder, a lambda, andpackage_config.yaml.package <lambda_name>: Package the specified Lambda function (either as zip or Docker container).package-layer <layer_name>: Package a specific layer (e.g.,common) into a zip file.config <lambda_name>: Generate a package_config.yaml from an existing monorepo.clean: Clean thedist/directory by removing all contents.
Example Workflow
- Initialize the project:
lambda-packer init my_project --lambda-name my_lambda
- Edit
package_config.yamlto configure the Lambda:
lambdas:
my_lambda:
type: zip
runtime: "3.9"
layers:
- common
-
Install dependencies for
my_lambdaby editingmy_lambda/requirements.txt. -
Package the Lambda:
lambda-packer package my_lambda
- Package the
commonlayer (if needed):
lambda-packer package-layer common
6. Adding a new lambda to an existing repository
You can add a new Lambda to an existing repository using the lambda command. You can also specify layers to be added to the new Lambda.
lambda-packer lambda <lambda_name> --runtime <runtime_version> --type <zip|docker> --layers <layer1> --layers <layer2>
Example:
lambda-packer lambda my_new_lambda --runtime 3.9 --type docker --layers common --layers shared
This will create a new Lambda directory and update the package_config.yaml like so:
lambdas:
my_new_lambda:
runtime: "3.9"
type: docker
layers:
- common
- shared
If no layers are specified, the layers key will not be added.
Example without layers:
lambda-packer lambda my_new_lambda --runtime 3.9 --type docker
This will update the package_config.yaml like this:
lambdas:
my_new_lambda:
runtime: "3.9"
type: docker
Contributing
Contributions are welcome! If you'd like to contribute to this project, please open a pull request or issue on GitHub.
Development Setup
Clone this repository and run:
git clone https://github.com/calvernaz/lambda-packer.git
cd lambda-packer
pip install -e .
For development:
pip install -e .[dev]
Running Tests
pytest tests/
Release
Bump patch version:
bumpversion patch
Push tags:
git push origin main --tags
License
This project is licensed under the MIT License.
Contact
For any questions or feedback, feel free to open an issue on GitHub.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lambda_packer-0.1.36.tar.gz.
File metadata
- Download URL: lambda_packer-0.1.36.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
051a25d98db4f2d11e969750040cdfd198172514f5634962e5ecfa5b0d327d13
|
|
| MD5 |
e105cc9a0b3c30bb3ff560f9c2045808
|
|
| BLAKE2b-256 |
65fd3f445fc0de17c4eb24832a41c7b347446afb9c83877eed5032d987a005bf
|
File details
Details for the file lambda_packer-0.1.36-py3-none-any.whl.
File metadata
- Download URL: lambda_packer-0.1.36-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
681408e7e1b9726a9fba28f65bf38ee2a7de20dc2368bf700a504a836c441503
|
|
| MD5 |
670f50565602ec5e0a2adf393c3daf90
|
|
| BLAKE2b-256 |
3d70a1b6828e300edf280b11e398d26bd96fa0ac1e333667b6896b511aa092e9
|