feat(terraform): Add AWS multi-tier infrastructure project
This commit is contained in:
229
terraform/aws-infrastructure/README.md
Normal file
229
terraform/aws-infrastructure/README.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# 🏗️ AWS Multi-Tier Infrastructure - Terraform Project
|
||||
|
||||
## 📋 Overview
|
||||
|
||||
Production-ready Terraform project for complete AWS multi-tier infrastructure with HA, security, and scalability best practices.
|
||||
|
||||
### 🏛️ Architecture
|
||||
|
||||
```
|
||||
Internet → ALB → Public Subnets (Multi-AZ)
|
||||
↓
|
||||
NAT Gateways
|
||||
↓
|
||||
Private Subnets (App Tier + Auto Scaling)
|
||||
↓
|
||||
Database Subnets (RDS PostgreSQL Multi-AZ)
|
||||
```
|
||||
|
||||
### 📦 Components
|
||||
|
||||
- **VPC** - Isolated network across 2 AZs
|
||||
- **ALB** - Application Load Balancer
|
||||
- **Auto Scaling** - EC2 with dynamic scaling
|
||||
- **RDS PostgreSQL** - Managed database with backups
|
||||
- **S3** - Storage buckets (data/logs/backups)
|
||||
- **CloudWatch** - Monitoring & alerting
|
||||
- **IAM** - Security roles & policies
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
```bash
|
||||
# 1. Clone
|
||||
git clone http://git.thedevops.dev/admin/k3s-gitops.git
|
||||
cd k3s-gitops/terraform/aws-infrastructure
|
||||
|
||||
# 2. Configure AWS
|
||||
export AWS_ACCESS_KEY_ID="your-key"
|
||||
export AWS_SECRET_ACCESS_KEY="your-secret"
|
||||
|
||||
# 3. Create config
|
||||
cp environments/dev.tfvars terraform.tfvars
|
||||
vim terraform.tfvars # Edit: project_name, db_password
|
||||
|
||||
# 4. Deploy
|
||||
terraform init
|
||||
terraform plan
|
||||
terraform apply
|
||||
```
|
||||
|
||||
**Deploy time:** ~15-20 minutes
|
||||
**Dev cost:** ~$50-100/month
|
||||
|
||||
---
|
||||
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
terraform/aws-infrastructure/
|
||||
├── main.tf # Main configuration
|
||||
├── variables.tf # Input variables
|
||||
├── outputs.tf # Output values
|
||||
├── Jenkinsfile # CI/CD pipeline
|
||||
├── environments/ # Environment configs
|
||||
│ ├── dev.tfvars
|
||||
│ ├── staging.tfvars
|
||||
│ └── production.tfvars
|
||||
├── modules/ # Reusable modules
|
||||
│ ├── vpc/
|
||||
│ ├── alb/
|
||||
│ ├── asg/
|
||||
│ ├── rds/
|
||||
│ └── ...
|
||||
├── scripts/
|
||||
│ └── user-data.sh # EC2 bootstrap
|
||||
└── docs/
|
||||
├── QUICKSTART.md # 5-min setup guide
|
||||
├── ARCHITECTURE.md # Detailed design
|
||||
└── SECURITY.md # Best practices
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Usage Examples
|
||||
|
||||
### Development Environment
|
||||
|
||||
```bash
|
||||
terraform apply -var-file="environments/dev.tfvars"
|
||||
```
|
||||
|
||||
### Production Environment
|
||||
|
||||
```bash
|
||||
terraform apply -var-file="environments/production.tfvars"
|
||||
```
|
||||
|
||||
### Scale Application
|
||||
|
||||
```bash
|
||||
# Edit terraform.tfvars
|
||||
asg_desired_capacity = 5
|
||||
|
||||
terraform apply
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
**Minimum required variables:**
|
||||
|
||||
```hcl
|
||||
# terraform.tfvars
|
||||
project_name = "myapp"
|
||||
environment = "dev"
|
||||
db_username = "admin"
|
||||
db_password = "SecurePassword123!"
|
||||
```
|
||||
|
||||
**See `environments/` for full examples**
|
||||
|
||||
---
|
||||
|
||||
## 📊 Outputs
|
||||
|
||||
```bash
|
||||
# View all outputs
|
||||
terraform output
|
||||
|
||||
# Get ALB DNS
|
||||
terraform output alb_dns_name
|
||||
|
||||
# Get RDS endpoint
|
||||
terraform output rds_endpoint
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Security
|
||||
|
||||
- ✅ State encryption in S3
|
||||
- ✅ Private subnets for apps
|
||||
- ✅ Isolated database subnets
|
||||
- ✅ Security groups with minimal permissions
|
||||
- ✅ Secrets in AWS Secrets Manager
|
||||
- ✅ VPC Flow Logs enabled
|
||||
- ✅ CloudTrail auditing
|
||||
|
||||
**⚠️ NEVER commit secrets to Git!**
|
||||
|
||||
---
|
||||
|
||||
## 🔄 CI/CD
|
||||
|
||||
Jenkins pipeline included with:
|
||||
- ✅ Terraform validation
|
||||
- ✅ Security scanning (tfsec)
|
||||
- ✅ Cost estimation (Infracost)
|
||||
- ✅ Approval gates for production
|
||||
- ✅ Automated smoke tests
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
- [Quick Start Guide](docs/QUICKSTART.md) - 5-minute setup
|
||||
- [Architecture Details](docs/ARCHITECTURE.md) - Design deep-dive
|
||||
- [Security Best Practices](docs/SECURITY.md) - Hardening guide
|
||||
- [Troubleshooting](docs/TROUBLESHOOTING.md) - Common issues
|
||||
|
||||
---
|
||||
|
||||
## 💰 Cost Estimates
|
||||
|
||||
| Environment | Monthly Cost |
|
||||
|-------------|--------------|
|
||||
| Development | $50-100 |
|
||||
| Staging | $200-400 |
|
||||
| Production | $500-1000 |
|
||||
|
||||
*Actual costs depend on usage and instance types*
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
```bash
|
||||
# Validate
|
||||
terraform validate
|
||||
|
||||
# Format check
|
||||
terraform fmt -check -recursive
|
||||
|
||||
# Security scan
|
||||
docker run --rm -v $(pwd):/src aquasec/tfsec /src
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗑️ Cleanup
|
||||
|
||||
```bash
|
||||
# Destroy dev
|
||||
terraform destroy -var-file="environments/dev.tfvars"
|
||||
|
||||
# ⚠️ Production requires manual approval
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
- 🐛 [Issues](http://git.thedevops.dev/admin/k3s-gitops/issues)
|
||||
- 💬 Slack: #infrastructure
|
||||
- 📧 Email: devops@example.com
|
||||
|
||||
---
|
||||
|
||||
## 📄 License
|
||||
|
||||
MIT License
|
||||
|
||||
---
|
||||
|
||||
**Status:** ✅ Production Ready
|
||||
**Version:** 1.0.0
|
||||
**Last Updated:** 2026-01-06
|
||||
Reference in New Issue
Block a user