$ terraform apply # AWS labs, with a runner
AWS infrastructure defined in Terraform. scripts/run-lab.sh runs each lab end to end:
init → validate → apply → exercise against the live API → destroy, always destroying even when a step
fails, and writes a Markdown evidence report. Guardrails: a budget alarm, tag-based orphan sweep, and a
nuke for anything left behind. Labs are sized to cost well under a dollar per run.
$ gh run view 36888842277 # lab 06, the flagship
A containerized API on ECS Fargate behind an ALB, deployed by GitHub Actions that assume an AWS role through OIDC (no long-lived keys). Lint → validate → build and push → plan → a human approval gate → apply → a smoke test against the live endpoint. Then a separate destroy workflow counts survivors from the owning services, not a tagging index.
$ bash ./exercise.sh evidence PASS: ALB /healthz returned 200 {"status":"ok"} PASS: 2 healthy targets (desired 2) PASS: service runningCount == desiredCount (2) PASS: every running task runs the ECR digest for tag bf99413a… (sha256:486cd195…) PASS: /version reports the deployed tag (bf99413a…) $ gh workflow run lab06-destroy.yml # 34 resources destroyed · survivors by owning services: 0 · ~1.5 h up ≈ $0.15
$ ls labs/ # each one applied, exercised, destroyed
Loading labs…
⇄ Networking labs
Linux + Raspberry Pi + AWS networking labs — each a study-grade write-up with topology, key steps, and an honest "be ready to explain" list.
▶ Building next (ranked by what 34 current entry-level cloud postings ask for)
Counts: postings containing the term, out of 34 entry/mid cloud postings open on 2026-09-30 (support, CloudOps, Cloud Engineer I/II, junior DevOps/SRE, NOC). Certs named: SAA 3, CCP 2, CloudOps 1; CompTIA 1; ITIL 0.
$ ./market-scan # what cloud postings ask for, auto-updated
A demand signal from — job postings my own job-search agent has collected, blended with current AWS and networking hiring trends. An agent on my Pi regenerates this weekly and turns uncovered skills into the "building next" list above.