This directory contains all infrastructure definitions for PredictIQ using Terraform.
infrastructure/
├── terraform/
│ ├── main.tf # Main configuration
│ ├── variables.tf # Variable definitions
│ ├── outputs.tf # Output definitions
│ ├── environments/ # Environment-specific configurations
│ │ ├── dev.tfvars
│ │ ├── staging.tfvars
│ │ └── prod.tfvars
│ └── modules/ # Reusable modules
│ ├── vpc/
│ ├── rds/
│ ├── redis/
│ ├── ecs/
│ └── monitoring/
├── ROLLBACK.md # Rollback procedures
└── README.md # This file
- Terraform >= 1.5.0
- AWS CLI configured
- Appropriate AWS IAM permissions
- Access to Terraform state bucket
cd infrastructure/terraform
terraform init# For development environment
terraform plan -var-file="environments/dev.tfvars"
# For staging environment
terraform plan -var-file="environments/staging.tfvars"
# For production environment
terraform plan -var-file="environments/prod.tfvars"# Apply changes (requires approval)
terraform apply -var-file="environments/prod.tfvars"
# Auto-approve (use with caution)
terraform apply -auto-approve -var-file="environments/prod.tfvars"- Single-node Redis
- Micro RDS instance
- 1 API task
- Minimal resources for testing
- Multi-node Redis (2 nodes)
- Small RDS instance
- 2 API tasks
- Production-like configuration
- Multi-node Redis (3 nodes)
- Medium RDS instance
- 3 API tasks
- High availability setup
- Creates isolated network environment
- Configurable CIDR blocks
- Public and private subnets
- NAT Gateway for private subnet egress
- PostgreSQL database
- Automated backups
- Multi-AZ deployment (prod)
- Encryption at rest
- ElastiCache cluster
- Automatic failover
- Parameter group configuration
- Subnet group for VPC placement
- Fargate launch type
- Application Load Balancer
- Auto-scaling policies
- CloudWatch logging
- CloudWatch dashboards
- SNS alerts
- Log groups
- Metric alarms
Terraform state is stored in S3 with:
- Encryption enabled
- Versioning enabled
- DynamoDB table for state locking
- Restricted IAM access
- Create feature branch for infrastructure changes
- Update Terraform files
- Run
terraform planand review changes - Create pull request with plan output
- After approval, merge to main
- GitHub Actions automatically applies changes
Monitor infrastructure health:
# View Terraform state
terraform show
# Get outputs
terraform output
# Check AWS resources
aws ec2 describe-instances --filters "Name=tag:Project,Values=predictiq"
aws rds describe-db-instances
aws elasticache describe-cache-clusters# Force unlock (use with caution)
terraform force-unlock <LOCK_ID># Import existing resource
terraform import module.vpc.aws_vpc.main vpc-12345678
# Remove resource from state
terraform state rm module.vpc.aws_vpc.main# Refresh state
terraform refresh
# Validate configuration
terraform validate
# Format configuration
terraform fmt -recursive- Never commit sensitive values to git
- Use AWS Secrets Manager for secrets
- Enable MFA for AWS console access
- Restrict Terraform state bucket access
- Enable CloudTrail for audit logging
- Use IAM roles instead of access keys
- Implement least privilege access
- Use spot instances for non-critical workloads
- Right-size instances based on metrics
- Enable auto-scaling for variable workloads
- Use reserved instances for baseline capacity
- Monitor unused resources
For infrastructure issues:
- Check CloudWatch logs
- Review Terraform state
- Consult ROLLBACK.md for recovery procedures
- Contact infrastructure team