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:DescribeTagsec2:DescribeInstancess3:GetObjects3:ListBucketecr:GetAuthorizationTokenecr:BatchGetImageecr:BatchCheckLayerAvailabilityecr:GetDownloadUrlForLayersecretsmanager:GetSecretValuesecretsmanager:ListSecretssecretsmanager:DescribeSecretlogs:CreateLogGrouplogs:CreateLogStreamlogs: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
- Fork the repository
- Create a feature branch
- Make your changes
- 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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49701f8446dbb954ac61defdc870a8ccf7462442b83c3019139fbb396ec0ac8e
|
|
| MD5 |
2af127f8495dcd8089db6a0765b52fd7
|
|
| BLAKE2b-256 |
1a36b499bef312538a144573c8eee262c50bcff2d6b92b37370fb4b9b5ff5869
|
File details
Details for the file awstransactionalapps-0.10.1-py3-none-any.whl.
File metadata
- Download URL: awstransactionalapps-0.10.1-py3-none-any.whl
- Upload date:
- Size: 42.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79a5ff5cd11a88218213af50bde25a047f240fc8b64905c610c3cf3bd1631743
|
|
| MD5 |
f182ff48781b3281a896cb2c0bce8449
|
|
| BLAKE2b-256 |
fb16cec434f6cde9166a2e9d2d45b9b04bc1a5d40caa42ff346ff672bf247951
|