Skip to content

Platform Engineering

Four Compute Models, One Artifact

I deployed the same Spring Boot JAR on EC2 with an Auto Scaling Group, on ECS Fargate, on a bare metal Kubernetes cluster, and on EKS. The artifact never changed. Everything that changed between the four is therefore not a property of the application, which makes it a fairly honest way to find out what each layer actually costs to operate.

Ten Things That Failed Silently

I went back through a year of my own failures across five projects and found the same one ten times. Every case had the same shape: I set a value, the tool accepted it, the tool did not apply it, and nothing anywhere said so.

This is the list, grouped by the reason each tool stayed quiet, because the groups turn out to be more useful than the instances.

Three Places to Put Provisioning: Init Tasks, Startup Files, or the Image

Getting a playground published is not the same as getting it usable. Between "the VM booted" and "a stranger can do the thing you built this for" sits a pile of work: packages, repositories, config files, seeded data, services that need to be running. The iximiuz Labs manifest gives you two places to put that work, and your Dockerfile is a third.

I picked the third for all six of my images. This is what the other two do, when each one is right, and the reasoning that made me choose the one I did.

Publishing a Custom Playground on iximiuz Labs: Custom Rootfs, Manifest, and labctl

iximiuz Labs boots each playground machine as a Firecracker microVM, and it will boot your OCI image as the root filesystem rather than one of its own. That is the interesting capability, and going from a Dockerfile to a public URL a stranger can click takes three moving parts: an image that boots, a manifest that describes the machines, and two labctl commands.

This is that path end to end, using the five playgrounds I actually publish, plus the parts I got wrong on the way.