ADR 3006: russetleaf.com as an on-demand demo stack behind an always-on edge¶
- Status: Accepted
- Date: 2026-11-02
- Applies to: russetleaf.com,
russetleaf-infra/envs/aws-edgeandenvs/aws, the demo workflows - Phase: 3
Context¶
The full AWS design (EKS, RDS Multi-AZ with RDS Proxy, ElastiCache, NAT Gateways, ALB, WAF, a GPU node) costs roughly $725–840 a month if left running: far too much for a portfolio site. But russetleaf.com should still answer when the stack is down, and bringing it up should be one command, not an afternoon.
Decision¶
- Two Terraform root modules:
envs/aws-edge(always on, about $1/month: the Route 53 zone, ACM certificates, the CloudFront distribution, the offline-page bucket, the media bucket, the log and trace buckets, the RDS final snapshot) andenvs/aws(the demo stack: VPC, EKS, Karpenter, RDS, ElastiCache, WAF, queues). - CloudFront's error fallback serves the offline page (status 503, pointing to russetleaf.dev) whenever the origin is unreachable, with short error caching and a 2-second origin timeout, so the switch between live and offline needs no DNS changes.
demo-upanddemo-downworkflows (GitHub Actions on the home ARC runners): apply, wait for Argo CD and the site, run kube-bench, register with the Argo CD hub; and the reverse, with a final RDS snapshot and an Alertmanager silence. A safety-net workflow alerts when the stack has been up longer than its limit.- Content between demos: a final snapshot on destroy restored on the next
demo-up; media lives in the always-on edge; an optional seed from russetleaf.dev's backups. - Cost guardrails: the russetleaf-com account's budgets and anomaly detection, a per-demo cost report, and about $1 per demo hour.
Alternatives considered¶
- Always on: the real production pattern, but about $725–840 a month.
- Route 53 failover routing to the offline page: works, but needs health checks and DNS TTL waits; CloudFront's error fallback is instant and free.
- No AWS site; Terraform only (plan, Checkov and Infracost in CI, never applied): costs nothing and still shows the design as reviewed code, but no live demo; a good interim step if Phase 3 is postponed.
- A smaller always-on AWS stack (e.g. a single small EKS node and no RDS): cheaper, but no longer the production design it's meant to show.
Consequences¶
- russetleaf.com always answers; the full design costs about $1 an hour only while demoing.
- The demo workflows become the most exercised Terraform paths, so drift and teardown problems surface quickly.
- Anything stored only in the demo stack (Prometheus data, OpenCost data) is lost at
demo-down; durable data goes to the always-on buckets.
When to revisit¶
- russetleaf.com needs to be always on, or to hold user data: move WAF to CloudFront, consider a warm standby, and revisit ADR 1018's AWS items.
Open items¶
- Phase 3 step 1.2: the always-on edge; step 6.1: the demo workflows and safety net; step 5.2: the cost review.