Opinionated Modular Cloud Deployment Tool (EasySAM)
Project description
EasySAM - Opinionated Modular Cloud Deployment Tool
EasySAM is a simple, opinionated tool for deploying cloud resources with a focus on simplicity and modularity. It provides a streamlined way to define and deploy AWS resources using YAML configuration files, making cloud infrastructure management more accessible and maintainable.
Features
- Simple YAML-based resource definitions
- Modular architecture with import support
- Comprehensive AWS resource support:
- Lambda functions
- DynamoDB tables
- S3 buckets
- SQS queues
- Kinesis streams
- API Gateway integrations
- Easy initialization of new projects
Installation
pip install easysam
Quick Start
- Initialize a new application:
easysam init my-app
- Deploy your application:
easysam deploy --tag my-tag=my-value --environment my-environment-name my-app
Please note that at least one tag is required.
For more options, use the --help flag:
easysam --help
Windows
On Windows, it may be necessary to run the deploy command with the -sam-tool sam.cmd option.
Prerequisites
- Python 3.12 or higher with
pipon PATH - uv 0.5 or higher
- AWS SAM CLI 1.138 or higher on PATH
- AWS Credentials Configured
Usage
First, initialize a new application. This command creates a new directory with the given name and generates the necessary files for a single lambda function and table. This version only supports AWS as a backend, and Python as a language.
easysam init <app-name>
Deploy the application:
easysam deploy <app-directory> <aws-environment-name>
For more options, use the --help flag:
easysam --help
Resource Definitions
The entry point for all cloud resources definitions in the resources.yaml file. See example applications for how applications are structures.
Table Definitions
tables:
- name: String (e.g., Items)
attributes:
- name: String (e.g., ItemID)
type: String (e.g., S), dynamodb type
hash: Boolean Optional (e.g., true), means Partition Key
range: Boolean Optional (e.g., true) means Sort Key
indices:
- name: String
attributes:
- name: String
type: String
hash: Boolean Optional
range: Boolean Optional
Bucket Definitions
buckets:
- name: String (e.g., my-bucket)
public Boolean Optional (e.g., true), means Public read policy
Queue Definitions
queues:
- name: String (e.g., my-queue)
Stream Definitions
streams:
- name: String (e.g., my-stream)
Lambda Definition
- name: String (e.g., my-lambda)
uri: String (i.e., local path to the source)
tables:
- String (e.g., Items)
polls:
- String (e.g., my-stream) - incoming stream's name
buckets:
- String (e.g., my-bucket)
send:
- String (e.g., my-queue) - outgoing queue's name
services:
- comprehend
API Gateway Definition
Lambda Function Integration
path: # (e.g., /my-lambda)
function: String # (e.g., my-lambda)
authorizer: String # (e.g., my-authorizer)
greedy: Boolean # (e.g., false)
Direct DynamoDB Integration
path: # (e.g., /my-lambda)
integration: dynamo
method: String # (e.g., get)
parameters: [String] # (e.g., [channel])
role: GatewayDynamoRole
action: String # (e.g., GetItem)
requestTemplate: VTL Template
responseTemplateFile: VTL File Path
Direct SQS Integration
path: # (e.g., /my-lambda)
integration: sqs
method: String # (e.g., post)
role: GatewaySQSRole
queue: String # (e.g., my-queue)
requestTemplate: String # VTL Template
responseTemplateFile: String # VTL File Path
authorizer: String # (e.g., my-authorizer)
Import
import:
- <directory>
The import directive searches recursively for easysam.yaml files (local definitions) in the specified directory and merges them into the current template.
Local Lambda Definition
lambda:
name: <name>
resources:
tables:
- <table>
buckets:
- <bucket>
send:
- <queue>
polls:
- <stream>
integration:
path: <path>
open: <boolean>
greedy: <boolean>
authorizer: <authorizer-lambda-name>
Locally-defined lambda URI is set to the path of the easysam.yaml file.
Local Import
import:
- <file>
Prismarine Support
prismarine:
default-base: <base-path>
access-module: <access-module-path>
extra-imports:
- <path.to.module:ClassName>
tables:
- package: <package-to-import>
base: <optional-base-path>
For more information, see Prismarine README.
Conditional Resources
Conditional resources are defined using the !Conditional tag.
? !Conditional
key: my-bucket
environment: prod
region: eu-west-2
:
extaccesspolicy: ProdPolicy
public: true
Negation
The ~ prefix negates the condition.
? !Conditional
key: my-bucket
environment: ~prod
region: ~eu-west-2
Deployment Context File
The deployment context file is used to further control resources, especially in CI. This version has the following features:
- override the resources.yaml file with the values in CI with
<path>: <value>pairs.
overrides:
buckets/my-bucket/public: true
Use the --context-file option to specify the deploy context file.
easysam deploy <app-directory> --environment <aws-environment-name> --context-file deploy-context.yaml
The deploy context file is a YAML file that contains the overrides.
Development
Setting up the development environment
- Clone the repository:
git clone https://github.com/adsight-app/easysam.git
cd easysam
- Install development dependencies and activate the virtual environment:
uv sync
source .venv/bin/activate # On Windows: .venv\Scripts\activate
Examples
See example folder for examples:
myapp- a simple application with a lambda function and a table.prismarine- a simple application with a lambda function and a table, using Prismarine.appwitherrors- an application with some errors in the resources.yaml file, to test the error handling.conditionals- an application with conditional resources.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
If you encounter any issues or have questions, please:
- Search existing issues
- Create a new issue if needed
Changelog
See CHANGELOG.md for a list of changes between versions.
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 easysam-1.3.1.tar.gz.
File metadata
- Download URL: easysam-1.3.1.tar.gz
- Upload date:
- Size: 89.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a3f87e5f5cfae8c4dbd02a3809e46ae300b50d25ae879fc5777d0a7bc1919b6
|
|
| MD5 |
309da4dc5b650ccf0db4dfc4969abf80
|
|
| BLAKE2b-256 |
ccd4285d5dba5ad1ba8a2983d09157a602fe7dfd4f5877befb178fa2861e3e69
|
File details
Details for the file easysam-1.3.1-py3-none-any.whl.
File metadata
- Download URL: easysam-1.3.1-py3-none-any.whl
- Upload date:
- Size: 26.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
daab0a5e9c0397b1d16f365227da069ffa3a065ab57832ba46adc343a5f2883b
|
|
| MD5 |
f1c1384a4e9fd921652b5d14b341cd1a
|
|
| BLAKE2b-256 |
f3b55b4c3b38c92db1397e1b281eab5d5b01107f23c5cf9bd0b44acc21261d13
|