Building ITS8 Cloud Services on Real Cloud Infrastructure
The best way to prove you understand cloud services is to build something with them. Here’s how I built an AWS and Azure study guide that runs on the same infrastructure it teaches.
The Problem With Most Study Guides
Most cloud exam prep resources give you a list of services and definitions. Memorize the difference between EBS and EFS. Know what a NAT Gateway does. Understand the shared responsibility model. That’s all fine — but it’s passive. You read, you highlight, you forget.
I wanted to build something where the act of building it was the studying. The site teaches AWS and Azure fundamentals. The site itself runs on those fundamentals. When you visit the visitor counter on /cloud-prep, that’s a serverless function hitting a NoSQL database — the same pattern the AWS and Azure exams test you on.
What I Built
Five pages covering two certification tracks, a live visitor counter backed by a serverless API, and full Infrastructure as Code for both AWS and Azure equivalents. Here’s the breakdown:
- /cloud-prep — hub page with exam track selection and visitor counter
- /cloud-prep/aws — AWS Cloud Practitioner (CLF-C02), all 4 domains
- /cloud-prep/azure — Azure Fundamentals (AZ-900), all 3 domains
- /cloud-prep/compare — 30+ AWS vs Azure service mappings in one table
- /cloud-prep/team — architecture, tech stack, weekly deliverables
The whole thing lives under tradingwithhak.com (my existing financial education platform), deployed on Cloudflare Pages. But the IaC templates in docs/terraform/ show the exact equivalent AWS and Azure deployment — so the project demonstrates both clouds.
The Architecture
Every component in this stack has a direct AWS and Azure equivalent, which is exactly what the certification exams test. Here’s how the production stack maps to what you’d study:
| Function | AWS Equivalent | Azure Equivalent | What I Used |
|---|---|---|---|
| Static hosting | S3 + Static Website | Blob Storage ($web) | Cloudflare Pages |
| CDN + HTTPS | CloudFront + ACM | Azure CDN + auto TLS | Cloudflare (built-in) |
| Serverless API | Lambda + API Gateway | Azure Functions | Next.js Edge Runtime |
| NoSQL database | DynamoDB | Cosmos DB Table API | Supabase (PostgreSQL) |
| DNS | Route 53 | Azure DNS | Cloudflare DNS |
| CI/CD | CodePipeline + CodeBuild | Azure DevOps Pipelines | GitHub Actions |
| Monitoring | CloudWatch + X-Ray | Azure Monitor + App Insights | Cloudflare Analytics |
The IaC files (docs/terraform/aws/main.tf and docs/terraform/azure/main.tf) deploy the full equivalent stack on each cloud. You could run either one from scratch withterraform apply.
The Visitor Counter: Serverless + NoSQL in Practice
Every page has a live visitor counter. It’s a tiny feature, but it touches every layer the exam covers: client-side JavaScript, a serverless API, and a NoSQL database.
When you load a cloud-prep page, the browser fires a POST /api/cloud-prep/visit?slug=... request. That hits a Next.js Edge Runtime function (equivalent to Lambda), which calls Supabase (equivalent to DynamoDB/Cosmos) to atomically increment a counter and return the new value. The whole thing runs in under 50ms.
In the AWS Terraform config, this is wired as Lambda + DynamoDB + API Gateway HTTP. In Azure, it’s Azure Functions (Consumption Y1 plan) + Cosmos DB Table API. The pattern is identical; only the service names change.
What I Learned Building This
The shared responsibility model clicks when you live it. Reading “AWS manages the hypervisor, you manage the OS” is abstract. Actually deploying an EC2 instance and realizing you have to patch it yourself makes it real. Cloudflare Pages is SaaS — I don’t touch the server. Lambda is closer to PaaS. EC2 is IaaS. The difference isn’t just a definition anymore.
IaC forces you to understand every resource. Writing Terraform requires you to understand how resources relate. You can’t attach an IAM role to Lambda without understanding what a role is. You can’t create a DynamoDB table without understanding partition keys. Terraform was the most educational part of this project.
Azure and AWS solve the same problems differently. DynamoDB vs Cosmos DB: both are serverless NoSQL with single-digit millisecond latency. But Cosmos DB supports five consistency levels; DynamoDB offers two (strong and eventual). CloudFront uses Origin Access Control; Azure CDN uses endpoint origin configurations. The compare page made this concrete.
Cost matters from day one. Both Terraform configs include budget alerts. AWS Budgets sends an email at 80% of a $10/month cap. Azure Consumption Budgets does the same. On the real exams, cost optimization is 12% of CLF-C02 and a chunk of every Azure governance question. Watching your own bill makes those questions personal.
Week-by-Week Deliverables
This was a 4-week capstone. Here’s what shipped each week:
Try It Yourself
The entire site is open source. If you’re studying for either cert, the study guides are at:
If you’re deploying your own version, the Terraform configs in docs/terraform/ will spin up the full stack on either cloud in one command. Check the project info page for the full architecture breakdown.