Skip to main content

AWS Transactional Apps - A reusable Python CDKTF package for provisioning EC2-based Docker architectures with S3 script deployment

Project description

AWSTransactionalApps

A reusable Python CDKTF package that provisions the complete AWS Transactional Apps architecture, uploads all required runtime scripts to an S3 deployment bucket, and provides a sample project to validate the package.

Features

  • EC2 Instance Provisioning: Creates EC2 instances with proper IAM roles and instance profiles
  • S3 Script Deployment: Automatically uploads runtime scripts (setup, loader, bootstrap, update) to S3
  • ECR Integration: Conditional ECR repository creation for Docker images
  • RDS Support: Optional PostgreSQL RDS instance creation
  • Secrets Manager: Integrated secrets management for application configuration
  • SystemD Services: Includes systemd service and timer configurations

Architecture Components

  • setup.sh: Initial EC2 setup script downloaded via user data
  • loader.sh: Application loader script
  • bootstrap.sh: Runtime bootstrap script
  • update.sh: Application update script
  • docker-compose.yml: Docker Compose configuration template
  • SystemD services: awsec2-loader.service, awsec2-app.service, awsec2-app-update.timer

Installation

Prerequisites

  • Python 3.8+
  • Node.js 16+ (for CDKTF)
  • AWS CLI configured with appropriate credentials
  • Terraform 1.0+

Install the Package Locally

# Clone the repository
cd /Repos/AWSTransactionalApps

# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install the package in editable mode
pip install -e AWSTransactionalApps/

Quick Start

Using the Sample Project

# Navigate to sample directory
cd /Repos/AWSTransactionalApps/sample

# Install sample project dependencies
pip install -r requirements.txt

# Generate CDKTF provider bindings (first time only)
cdktf get

# Synthesize Terraform configuration
cdktf synth

# Review the Terraform plan
cdktf diff

# Deploy the infrastructure
cdktf deploy

Usage

Basic Usage

from cdktf import App
from AWSTransactionalAppsStack import DockerEC2

app = App()

DockerEC2(
    app,
    "my-app-stack",
    project_name="my-project",
    region="us-east-1",
    ami_id="ami-0c2b8ca1dad447f8a",
    instance_type="t4g.medium",
    disk_size=100,
)

app.synth()

Configuration Options

Parameter Type Default Description
project_name str Required Unique project identifier
region str ca-central-1 AWS region
ami_id str ami-0c2b8ca1dad447f8a EC2 AMI ID
instance_type str t4g.medium EC2 instance type
disk_size int 100 Root volume size in GB
platform_name str None Platform name (defaults to project_name)
deployment_bucket str None S3 bucket for deployments
storage_bucket str None S3 bucket for storage
enable_rds bool False Enable RDS PostgreSQL
rds_name str None RDS instance identifier
private_ecr bool True Use private ECR

IAM Permissions

The EC2 instance is provisioned with the following IAM permissions:

  • ec2:DescribeTags
  • ec2:DescribeInstances
  • s3:GetObject
  • s3:ListBucket
  • ecr:GetAuthorizationToken
  • ecr:BatchGetImage
  • ecr:BatchCheckLayerAvailability
  • ecr:GetDownloadUrlForLayer
  • secretsmanager:GetSecretValue
  • secretsmanager:ListSecrets
  • secretsmanager:DescribeSecret
  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:PutLogEvents

Project Structure

AWSTransactionalApps/
├── setup.py
├── pyproject.toml
├── README.md
├── requirements.txt
└── AWSTransactionalAppsStack/
    ├── __init__.py
    ├── config.py
    ├── DockerEC2.py
    ├── uploader.py
    ├── iam/
    │   └── ec2_policy.json
    └── scripts/
        ├── setup/
        │   └── setup.sh
        ├── loader/
        │   └── loader.sh
        ├── runtime/
        │   ├── bootstrap.sh
        │   └── update.sh
        ├── systemd/
        │   ├── awsec2-loader.service
        │   ├── awsec2-app.service
        │   └── awsec2-app-update.timer
        └── compose/
            └── docker-compose.yml

Development

Running Tests

# From the package directory
pip install pytest
pytest tests/

Building the Package

pip install build
python -m build

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

For issues and feature requests, please visit: https://dev.azure.com/buzzerboyinc/buzzerboy

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

awstransactionalapps-0.10.1.tar.gz (32.1 kB view details)

Uploaded Source

Built Distribution

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

awstransactionalapps-0.10.1-py3-none-any.whl (42.2 kB view details)

Uploaded Python 3

File details

Details for the file awstransactionalapps-0.10.1.tar.gz.

File metadata

  • Download URL: awstransactionalapps-0.10.1.tar.gz
  • Upload date:
  • Size: 32.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.14.2

File hashes

Hashes for awstransactionalapps-0.10.1.tar.gz
Algorithm Hash digest
SHA256 49701f8446dbb954ac61defdc870a8ccf7462442b83c3019139fbb396ec0ac8e
MD5 2af127f8495dcd8089db6a0765b52fd7
BLAKE2b-256 1a36b499bef312538a144573c8eee262c50bcff2d6b92b37370fb4b9b5ff5869

See more details on using hashes here.

File details

Details for the file awstransactionalapps-0.10.1-py3-none-any.whl.

File metadata

File hashes

Hashes for awstransactionalapps-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 79a5ff5cd11a88218213af50bde25a047f240fc8b64905c610c3cf3bd1631743
MD5 f182ff48781b3281a896cb2c0bce8449
BLAKE2b-256 fb16cec434f6cde9166a2e9d2d45b9b04bc1a5d40caa42ff346ff672bf247951

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