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.8.1.tar.gz (31.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.8.1-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: awstransactionalapps-0.8.1.tar.gz
  • Upload date:
  • Size: 31.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.8.1.tar.gz
Algorithm Hash digest
SHA256 d95b3c911808159e72c188452ae0e7d9b313eda34c8e4a4cff13290551dd6606
MD5 19833372b01a575fcc94a370228b29a5
BLAKE2b-256 0e58a73f6dee6ffc539cddcb528fa7e25eb563c8229bea1630983248a06ad009

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for awstransactionalapps-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cef1843670ae5fe9198f4a7471b4f8cd9dc6ecfa94a0f919721c0c9ca4f16d60
MD5 91ad8fe2f1d7dde2c0126bf4cac9eb1e
BLAKE2b-256 5d6161ccb295421d974ba0f38e59c96c9796804e364ae976a2bb87a4cea614cf

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