№ 01 · The counter
Launch a container
Every button here is a genuine ecs:RunTask against a
scale-to-zero Fargate cluster; nothing is simulated. The oven bay holds one launch at a time
and there is a global daily cap, so if someone else's container is in flight you'll be handed
theirs to watch instead.
The daily bake
0.25 vCPU / 512 MiB, the smallest size Fargate sells: builds the fictional City of Alpenglow operations report and files it to S3 with its task role, about a tenth of a cent per run. The ticket below prices it to the fraction.
The bake-off two ovens fire at once
A race launches the identical job in two real tasks side by side and takes two of the day's launch slots. The oven race runs a fixed CPU workload, so the wall clock shows exactly what paying for 4x the compute buys. The recipe race bakes the same app from a slim alpine image and a deliberately heavy Debian one: that race is decided before the job even starts.
The failure museum
Four honest endings. The burnt batch hits a deliberate bad-input error (exit 1). The pan-outgrower allocates memory until Fargate's 512 MiB task limit kills it (exit 137, OutOfMemoryError, mid-sentence). The two proofs run about three and a half minutes on their own; pull them early from the oven instead: the clean drain traps SIGTERM and exits 0 inside the 30 second grace window, the stubborn one ignores the bell until ECS sends SIGKILL.
№ 02 · The oven
Watch it run
Launch a container above, or click a recent run.
container stdout will stream here once the oven is lit
Cold-start anatomy
Every second of this run, measured by ECS itself
(DescribeTasks timestamps). What you wait for is capacity and the image
pull, not your code; the bake ticket prices the whole thing from published us-east-1
rates.
oven one is lighting
oven two is lighting
№ 03 · The recipe
The image pipeline
The image those tasks run is the recipe, and even the recipe was made in AWS: there is deliberately no Docker on the dev machine, so the app source is zipped to S3, CodeBuild docker-builds it, and pushes to ECR, where the health inspection (basic vulnerability scanning) runs on every push. This panel reads all of it live.
Two recipes, one app: the health inspection
The bake-off's heavy image is byte-for-byte the same job on a full
Debian node base instead of alpine. Same source, same npm ci, same command.
The registry tells the rest of the story.
№ 04 · The shelf
Recent runs
Yours, other visitors', and the batch EventBridge Scheduler bakes every morning (the "scheduled batch job" pattern). Records and report artifacts expire after 48 hours. Click a run to load its logs.
Loading…
№ 05 · The fine print
What this plank proves
- Containers without the idle bill: no ECS service, no ALB, no EKS control plane at $73/mo. Tasks exist only while they run, so the environment idles at ~$0 yet is live right now. A cold oven costs nothing. The classic fit for batch jobs, report generation, and queue workers.
- A real image pipeline: source to CodeBuild to ECR, with scan-on-push vulnerability findings surfaced above and a lifecycle policy pruning old images.
- Task IAM roles done right: the execution role (pull image, write
logs) is separate from the task role, which can do exactly one thing: write the
finished report under
artifacts/. The report's footer is written by that role. - Observable by default: stdout to awslogs to CloudWatch, tailed live above;
lifecycle state from
DescribeTasks; final state persisted by an EventBridge task-state-change rule even if nobody's watching. - No NAT tax: tasks get a public IP in a public subnet with a no-ingress security group, the documented pattern for internet-reachable AWS APIs without a $32/mo NAT gateway.
- Cold starts, itemized: the anatomy bar splits every run into capacity,
image pull, container start, and the job itself, straight from
DescribeTaskstimestamps, and the bake ticket prices the run to the fraction of a cent while it happens. - Sizing and image weight, raced honestly: the bake-off runs identical workloads in two live tasks. Four times the vCPU finishes the same batch about four times sooner for nearly the same money, and a heavy base image loses the pull race before its job starts.
- Failure is part of the demo: exit 1 with logs up to the fault, a real OOM kill at the task memory limit (exit 137), and both endings of SIGTERM: a clean drain inside the 30s stopTimeout and a SIGKILL when a job refuses to listen.