Practical project developed for the study, evolution, and demonstration of knowledge in:
- AWS EC2
- AWS SSM
- AWS IAM
- AWS VPC
- AWS Security Groups
- AWS Systems Manager
- AWS RDS
- AWS ECR
- AWS ECS
- AWS CloudWatch
- Containers
- Docker
- Docker Compose
- Terraform
Objective: To progressively build a cloud architecture similar to production environments focused on high performance.
Throughout this repository, the same EC2 instance is intentionally reused across multiple labs.
This approach reflects real-world engineering practices by:
- reducing infrastructure costs;
- minimizing unnecessary resource creation;
- encouraging infrastructure reuse;
- applying FinOps principles during learning.
After completing the last EC2-based lab, all AWS resources are removed following the Cleanup section.
The repository is organized into two complementary learning tracks:
- Manual Labs — infrastructure created and validated through the AWS Management Console and supporting tools.
- Terraform Labs — equivalent infrastructure reproduced using Infrastructure as Code.
This structure allows each architecture to be studied manually first and then automated with Terraform while preserving the same learning objectives.
aws-cloud-engineering-lab/
│
├── README.md
│
├── docs/
│ ├── architecture/
│ ├── diagrams/
│ ├── screenshots/
│ ├── lessons-learned/
│ └── lab-notes/
│
├── labs/
│ ├── 01-ec2-and-ssm/
│ ├── 02-ec2-monitoring-with-cloudwatch-agent/
│ ├── 03-iam-roles-and-policies/
│ ├── 04-ebs-volumes-and-snapshots/
│ ├── 05-vpc-with-public-subnet/
│ ├── 06-vpc-with-private-subnet-and-nat-gateway/
│ ├── 07-docker-installation-on-ec2/
│ ├── 08-docker-compose-application/
│ ├── 09-nginx-reverse-proxy/
│ ├── 10-amazon-rds-postgresql/
│ ├── 11-amazon-s3-static-website-hosting/
│ ├── 12-aws-backup-strategy/
│ ├── 13-cloudwatch-logs/
│ ├── 14-cloudwatch-metrics/
│ ├── 15-cloudwatch-alarms/
│ ├── 16-sns-notifications/
│ ├── 17-amazon-ecr/
│ ├── 18-amazon-ecs-fargate/
│ ├── 19-ecs-service-management/
│ ├── 20-application-load-balancer/
│ ├── 21-terraform-ec2-deployment/
│ ├── 22-terraform-vpc-deployment/
│ ├── 23-terraform-ecs-deployment/
│ ├── 24-github-actions-build-pipeline/
│ ├── 25-github-actions-deployment-pipeline/
│ └── 26-end-to-end-ci-cd-pipeline/
│
├── terraform/
│ ├── README.md
│ │
│ ├── 01-ec2-and-ssm/
│ │ ├── images/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── compute.tf
│ │ ├── data.tf
│ │ ├── iam.tf
│ │ ├── locals.tf
│ │ ├── network.tf
│ │ ├── outputs.tf
│ │ ├── provider.tf
│ │ ├── terraform.tfvars.example
│ │ ├── variables.tf
│ │ └── versions.tf
│ │
│ └── future-labs/
│ └── Terraform implementations will be added progressively
│ as their corresponding manual laboratories are completed.
│
└── scripts/
└── Supporting automation and validation scripts
Each laboratory follows a progressive engineering workflow:
Manual provisioning
↓
Architecture validation
↓
Terraform reproduction
↓
Infrastructure comparison
↓
Automated cleanup
↓
Post-destroy verification
↓
Lessons learned
Manual and Terraform laboratories use matching directory names:
labs/01-ec2-and-ssm/
↕
terraform/01-ec2-and-ssm/
The manual implementation explains how the AWS resources are created and validated step by step.
The Terraform implementation reproduces the same architecture through Infrastructure as Code and includes:
- provider and version requirements;
- input variables;
- data-source queries;
- resource provisioning;
- outputs;
- validation commands;
- cost considerations;
- automated destruction;
- post-destroy verification.
Important
Terraform implementations are added progressively after their corresponding manual laboratories are completed and validated.
The Terraform infrastructure may be created temporarily alongside the manual infrastructure, using distinct names and tags, and then removed through an automated cleanup process.
This repository documents my hands-on journey through AWS Cloud Engineering, Infrastructure, Observability, Automation, Containers, and DevOps practices.
The goal is to build practical experience with real-world cloud environments while developing skills applicable to Cloud Engineering, DevOps, Platform Engineering, Site Reliability Engineering (SRE), and Infrastructure Operations roles.
- Configure IAM Role
- Create an EC2 instance
- Configure AWS Systems Manager
- Connect using Session Manager
Manual Lab: labs/01-ec2-and-ssm
Terraform Lab:
- Start existing EC2
- Install CloudWatch Agent
- Configure CloudWatch Agent
- Start Agent
- Verify Metrics
- Create Dashboard
Manual Lab: labs/02-ec2-monitoring-with-cloudwatch-agent
Terraform Lab:
- Create IAM Users
- Create IAM Groups
- Create Custom Policies
- Apply Least Privilege Principle
Manual Lab:
Terraform Lab:
- Create EBS Volume
- Attach Volume
- Create Snapshot
- Restore Snapshot
Manual Lab:
Terraform Lab:
- Create VPC
- Create Public Subnet
- Configure Internet Gateway
- Configure Route Tables
Manual Lab:
Terraform Lab:
- Create Private Subnet
- Configure NAT Gateway
- Validate Internet Access
- Test Secure Architecture
Manual Lab:
Terraform Lab:
- Install Docker
- Run First Container
- Container Lifecycle Management
- Security Best Practices
Manual Lab:
Terraform Lab:
- Deploy Multi-Container Application
- Configure Networks
- Configure Volumes
- Persist Data
- Install NGINX
- Configure Reverse Proxy
- Test HTTP Routing
- Validate Application Access
Manual Lab:
Terraform Lab:
- Deploy PostgreSQL
- Configure Security Groups
- Connect from EC2
- Execute SQL Queries
Manual Lab:
Terraform Lab:
- Create Bucket
- Enable Static Hosting
- Upload Website Files
- Configure Public Access
Manual Lab:
Terraform Lab:
- Define Backup Policy
- Backup EBS
- Backup RDS
- Test Recovery
Manual Lab:
Terraform Lab:
- Create Log Groups
- Collect Application Logs
- Query Logs
- Analyze Events
Manual Lab:
Terraform Lab:
- Analyze Metrics
- Create Dashboards
- Monitor Resources
- Configure Custom Metrics
Manual Lab:
Terraform Lab:
- Create CPU Alarm
- Create Memory Alarm
- Configure Notifications
- Test Alerts
Manual Lab:
Terraform Lab:
- Create SNS Topic
- Configure Email Notifications
- Integrate with CloudWatch
- Validate Alert Delivery
Manual Lab:
Terraform Lab:
- Create Repository
- Build Docker Image
- Push Image
- Pull Image
Manual Lab:
Terraform Lab:
- Create ECS Cluster
- Configure Fargate
- Deploy Container
- Validate Service
Manual Lab:
Terraform Lab:
- Create ECS Service
- Configure Desired Count
- Test Availability
- Review Logs
Manual Lab:
Terraform Lab:
- Create Load Balancer
- Configure Target Group
- Route Traffic
- Validate Health Checks
Manual Lab:
Terraform Lab:
- Install Terraform
- Create EC2 Infrastructure
- Apply Configuration
- Destroy Resources
Manual Lab:
Terraform Lab:
- Create VPC Code
- Deploy Networking
- Validate Infrastructure
- Refactor Modules
- Create ECS Resources
- Deploy Containers
- Validate Automation
- Reuse Modules
Manual Lab:
Terraform Lab:
- Create Workflow
- Build Application
- Validate Pipeline
- Review Logs
Manual Lab:
Terraform Lab:
- Configure AWS Credentials
- Deploy Infrastructure
- Validate Deployment
- Automate Releases
Manual Lab:
Terraform Lab:
- Build Application
- Run Tests
- Publish Artifact
- Deploy Automatically
- Validate Production Workflow
Manual Lab:
Terraform Lab:
Completed Manual Labs: 02 / 26
Current Lab:
- 🚧 Manual: Lab 03 - IAM Roles and Policies
AND:
Completed Terraform Labs: 00 / 26
- 🚧 Terraform: Lab 01 - EC2 Instance with SSM Access









