Skip to main content

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

  1. Initialize a new application:
easysam init my-app
  1. Deploy your application:
easysam deploy --tag my-tag=my-value my-app my-stack-name

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 pip on 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-stack-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.

Development

Setting up the development environment

  1. Clone the repository:
git clone https://github.com/adsight-app/easysam.git
cd easysam
  1. Install development dependencies and activate the virtual environment:
uv sync
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

Contributing

We welcome contributions! Please see our Contributing Guide for details on how to submit pull requests, report issues, and suggest improvements.

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:

  1. Search existing issues
  2. Create a new issue if needed

Changelog

See CHANGELOG.md for a list of changes between versions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easysam-1.2.0.tar.gz (77.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

easysam-1.2.0-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file easysam-1.2.0.tar.gz.

File metadata

  • Download URL: easysam-1.2.0.tar.gz
  • Upload date:
  • Size: 77.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for easysam-1.2.0.tar.gz
Algorithm Hash digest
SHA256 f135bf599f1c15d2542180090488657a4b027d78bc1ccec7ec1ca86b94c26509
MD5 3a2bd59e96241515fd866d0e8c4a5a1c
BLAKE2b-256 126d0bad737ec0f5789e17afa8cc1b9d99f64e606d1a56769ddd588e3467d273

See more details on using hashes here.

File details

Details for the file easysam-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: easysam-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for easysam-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 33049ba537ea57bea39b6bb64c6a10cdf392e63df662f30ee38757b7cbf82680
MD5 22c032b0d9c1b08a15b307a0c5e166bf
BLAKE2b-256 5bd7a8bb0f279c2b3568dd25a8c2da32a5d6989e4d2d0d653a1b46a68e456214

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page