Skip to content

Module 8 — Capstone: Build, Ship and Run a 3-Tier Service

Goal: the student delivers, mostly unassisted, a small but complete production- style system: designed on a whiteboard, provisioned with Terraform, deployed by CI/CD, observed with Prometheus/Grafana, and operated against an SLO. This is the portfolio piece and the final assessment.

The brief (give it to the student verbatim)

FieldReport — engineers submit short job-completion reports from the field; a manager views the latest reports on a simple page.

Requirements: 1. Web tier: nginx serving a static frontend + reverse-proxying /api. 2. App tier: your Python API (extend fieldapp): POST /api/report, GET /api/reports, GET /healthz, GET /metrics. 3. Data tier: PostgreSQL in a container with a volume (RDS discussion optional). 4. All infrastructure changes via Terraform in a git repo — zero console changes. 5. Deploys via the GitHub Actions pipeline + self-hosted runner. main is always deployable; rollback demonstrated. 6. Dashboard with golden signals + SLO panel. SLO: 99.5% availability, p95 < 400 ms. Two alerts wired to it. 7. HTTPS for the frontend (via the course CloudFront distribution or a Caddy/Let's Encrypt stretch goal on the box). 8. A one-page architecture diagram and a runbook: how to deploy, roll back, and respond to each alert.

Starter skeleton in capstone-app/ (compose file, API stub, nginx config, PIR template) — using it is allowed; understanding it is required.

Suggested sequence (3–4 sessions)

  1. Design review (1 h): student presents the architecture diagram; instructor plays awkward stakeholder ("what if the box dies?", "where are secrets?", "how do we know it's slow before users call?"). Revise the module-2 design exercise — measure the improvement.
  2. Build: Terraform PR for any new SG rules/resources → pipeline builds images → runner deploys compose stack → smoke tests green.
  3. Observe: scrape configs added, dashboard built, alerts firing in test.
  4. Game day (final assessment): instructor runs 3 sabotages from a private list (kill the DB container; fill the disk; deploy a bad image the student must roll back; revoke the app's DB password; drop the SG rule between boxes). Student handles each on-call, then writes one PIR.

Marking rubric

Area Pass Distinction
IaC plan/apply clean, everything tagged, no console drift remote state, modules, CI runs fmt/validate/plan on PR
Pipeline push→deploy works; manual rollback shown deploy gated on tests; rollback is one click/command; SHA-pinned images
App/arch 3 tiers up; state survives redeploys stateless app tier proven (kill & recreate mid-traffic); healthz used by pipeline
Observability golden signals + both alerts fire correctly SLO/error-budget panel correct; blackbox outside-in; dashboard JSON in git
Operations restores service in each game-day scenario fast diagnosis narrated clearly; PIR would pass a real review
Runbook exists, accurate a stranger could operate the system from it

After the course

  • Re-run the module-0 assessment; show the deltas.
  • CV bullets fall straight out of the capstone (provision with Terraform, CI/CD with self-hosted runners, Prometheus/Grafana SLO monitoring, incident response).
  • Natural next steps: AWS Certified Cloud Practitioner → Solutions Architect Associate; Terraform Associate; LPIC-1 formally if certification is wanted; CKAD later only if k8s is on the horizon.
  • Keep the repo public (secrets scrubbed) — it's a better interview artefact than any certificate.