Command Palette

Search for a command to run...

Hectal

Project map · 8 stages · 32 missions

The ShopLite Build Log

One project, built across the whole course. Every stage adds a real piece of infrastructure to ShopLite, a small API, and every mission ends with it working, then broken on purpose, then fixed. This is where it ends up:

ShopLite — final architecturediagram
Rendering diagram…
  1. 0

    First Apply

    4 missions

    Set up the ShopLite repo, create your first real AWS resource with Terraform, learn to read a plan like a reviewer, and make the config reusable.

    + ShopLite gains:a Terraform repo, an S3 assets bucket with versioning and public access blocked, and variables/outputs — all created by terraform apply

  2. 1

    State

    4 missions

    Open Terraform's memory, move it off your laptop into S3 with locking, reconcile drift and adopt existing resources, and rename things without destroying them.

    + ShopLite gains:a bootstrap config for a versioned, encrypted state bucket; remote state with S3-native locking; an imported CloudWatch log group; safely renamed resources

  3. 2

    Network

    4 missions

    Build ShopLite's VPC in code: subnets generated with for_each and cidrsubnet, internet and NAT routing, tiered security groups, and a probe instance that proves it all works.

    + ShopLite gains:a two-AZ VPC with public, private, and database subnets, an internet gateway, toggleable NAT, an S3 gateway endpoint, and ALB → app → DB security groups

  4. 3

    Compute

    4 missions

    Ship the ShopLite API: an image in ECR, an Application Load Balancer with optional HTTPS, ECS Fargate tasks with least-privilege roles, autoscaling, and versioned deploys.

    + ShopLite gains:the ShopLite API on ECS Fargate behind an ALB with a public URL, images in ECR, optional HTTPS with ACM + Route 53, autoscaling, and versioned deploys via image_tag

  5. 4

    Data & Secrets

    4 missions

    Give ShopLite a Postgres database without a password ever touching your code or state, protect stateful resources from accidental destruction, and add private uploads with least-privilege IAM.

    + ShopLite gains:RDS Postgres in the database subnets with an AWS-managed master secret, the API reading its credentials from Secrets Manager, lifecycle guardrails and health checks, and a private uploads bucket with presigned uploads

  6. 5

    Modules

    4 missions

    Turn ShopLite's growing pile of .tf files into reusable modules — extracted with zero downtime, designed with typed interfaces, versioned, and instantiated with for_each.

    + ShopLite gains:a network module, an ecs-service module running the API and a new worker, git-tagged module versions, and services defined as a single map

  7. 6

    Environments

    4 missions

    Run the same ShopLite code as isolated dev and prod environments: separate state, separate tfvars, separate AWS accounts with guards against applying to the wrong one, and a safe way to share outputs.

    + ShopLite gains:per-environment backends and tfvars behind a small wrapper script, a prod environment in its own AWS account with allowed_account_ids, a us-east-1 provider alias for billing alarms, and outputs published to SSM for other teams

  8. 7

    Team Workflow

    4 missions

    Take Terraform off laptops: plans on every pull request, gated applies from CI with no stored keys, tests and static analysis, policy checks on plans, and the day-2 routines that keep it all healthy.

    + ShopLite gains:a GitHub Actions pipeline (plan on PR, gated apply on merge) using OIDC roles, tflint + trivy + terraform test, an OPA policy gate on plans, nightly drift detection, and a documented teardown