← Back to all products
$39
Terraform Starter Kit
Production-ready Terraform modules for AWS/Azure/GCP with state management, workspaces, and CI/CD integration.
MakeJSONMarkdownShellTerraformYAMLConfigAWSPostgreSQLGitHub Actions
📄 Product Preview
Try the interactive reader and demo tools below, or get the full product with all content unlocked.
📖 Interactive Reader (Free Preview) ⚙ Try Demo Tools 📦 Download Free Sample📁 File Structure 18 files
terraform-starter-kit/
├── .github/
│ └── workflows/
│ └── terraform.yml
├── LICENSE
├── Makefile
├── README.md
├── backend.tf
├── environments/
│ ├── dev/
│ │ └── main.tf
│ └── prod/
│ └── main.tf
├── guides/
│ └── terraform-best-practices.md
├── modules/
│ ├── cloudfront/
│ │ └── main.tf
│ ├── ecs/
│ │ └── main.tf
│ ├── iam/
│ │ └── main.tf
│ ├── rds/
│ │ └── main.tf
│ ├── s3/
│ │ └── main.tf
│ └── vpc/
│ └── main.tf
├── outputs.tf
├── scripts/
│ └── init-backend.sh
├── terraform.tfvars.example
└── variables.tf
📖 Documentation Preview README excerpt
Terraform Starter Kit
Production-ready AWS infrastructure modules with CI/CD, remote state, and environment separation.
A complete Terraform project scaffold for deploying secure, scalable AWS infrastructure. Includes VPC networking, ECS Fargate compute, RDS databases, S3 storage, CloudFront CDN, and IAM — all wired together with remote state, locking, and a GitHub Actions pipeline.
What You Get
- 6 Terraform modules — VPC, ECS, RDS, S3, IAM, CloudFront — each production-hardened
- Environment configs — Dev and prod with isolated state and tuned defaults
- Remote state — S3 + DynamoDB backend with encryption and locking
- CI/CD pipeline — GitHub Actions workflow: fmt, validate, plan on PR, apply on merge
- Bootstrap script — One command to create state bucket and lock table
- Best practices guide — 1,500+ words on Terraform patterns, module design, and state management
File Tree
terraform-starter-kit/
├── README.md
├── manifest.json
├── LICENSE
├── variables.tf # Root input variables with validation
├── outputs.tf # Root outputs (VPC, ECS, RDS, S3 endpoints)
├── backend.tf # S3 + DynamoDB remote state config
├── terraform.tfvars.example # Example variable values
├── Makefile # init / plan / apply / destroy shortcuts
├── modules/
│ ├── vpc/main.tf # VPC, subnets, NAT, IGW (multi-AZ)
│ ├── ecs/main.tf # ECS Fargate cluster + capacity providers
│ ├── rds/main.tf # RDS PostgreSQL, multi-AZ, encryption
│ ├── s3/main.tf # S3 bucket, versioning, lifecycle, replication
│ ├── iam/main.tf # IAM roles for ECS tasks, CI/CD, cross-account
│ └── cloudfront/main.tf # CloudFront distribution + S3 origin
├── environments/
│ ├── dev/main.tf # Dev environment composition
│ └── prod/main.tf # Prod environment composition
├── scripts/
│ └── init-backend.sh # Bootstrap S3 bucket + DynamoDB table
├── .github/workflows/
│ └── terraform.yml # CI/CD: plan on PR, apply on merge
└── guides/
└── terraform-best-practices.md
Getting Started
1. Bootstrap Remote State
# Create the S3 bucket and DynamoDB lock table
./scripts/init-backend.sh my-org-tf-state us-east-1
2. Configure Variables
cp terraform.tfvars.example terraform.tfvars
*... continues with setup instructions, usage examples, and more.*
📄 Code Sample .sh preview
scripts/init-backend.sh#!/usr/bin/env bash
set -euo pipefail
# Initialize Terraform backend (S3 + DynamoDB)
BUCKET_NAME="${1:-your-org-terraform-state}"
REGION="${2:-us-east-1}"
TABLE_NAME="terraform-locks"
echo "Creating S3 bucket for Terraform state..."
aws s3api create-bucket --bucket "$BUCKET_NAME" --region "$REGION"
aws s3api put-bucket-versioning --bucket "$BUCKET_NAME" --versioning-configuration Status=Enabled
aws s3api put-bucket-encryption --bucket "$BUCKET_NAME" --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms"}}]}'
echo "Creating DynamoDB table for state locking..."
aws dynamodb create-table --table-name "$TABLE_NAME" --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --billing-mode PAY_PER_REQUEST --region "$REGION"
echo "Backend initialized."