Fly.io runs containerised applications globally with a unique WireGuard-based private network. These exercises cover the Machines API, app configuration, persistent storage, and networking concepts essential for production deployments.
0 / 5 completed
1 / 5
At standup, a colleague asks what the Machines API is in Fly.io. What is the correct answer?
The Fly Machines API is a low-level REST API that lets you manage individual Fly Machines programmatically. You can create, start, stop, update, and destroy machines using HTTP requests — without the CLI or fly.toml. It is useful for dynamic workloads where you want to spin up short-lived VMs on demand, such as per-user compute, CI runners, or preview environments.
2 / 5
During a PR review, a teammate asks what fly.toml configures. Which answer is most complete?
fly.toml is Fly.io's app configuration file. It declares the app name, primary region, HTTP services (internal port, concurrency limits, health checks), process groups, volume mounts, environment variables, and deploy strategies (rolling, canary, etc.). It is the primary way to configure how flyctl deploy builds and runs your app, though the Machines API can override or supplement it.
3 / 5
In a design review, the team discusses persistent volumes on Fly.io. A junior engineer asks what happens to data on a volume if the machine is destroyed. What is correct?
Fly Volumes are persistent block storage that exist independently of the machines they are attached to. If you destroy a machine and create a new one in the same region, you can attach the existing volume and all data is intact. Volumes must be explicitly deleted to remove data — machine destruction alone does not delete them. This makes volumes safe for databases and stateful workloads on Fly.io.
4 / 5
An incident report shows two machines in different regions cannot reach each other on internal ports. A senior engineer asks what private networking on Fly.io uses. What is correct?
Fly.io's private networking is built on WireGuard. Every machine in an organisation is assigned a private IPv6 address on the fdaa::/8 prefix. Machines resolve each other using .internal DNS names (e.g., my-app.internal) through Fly's internal DNS, and traffic travels over the encrypted WireGuard overlay — not the public internet. This works across regions automatically without any extra configuration.
5 / 5
During a code review, a senior engineer asks what the concurrency settings in a Fly.io service configuration do. What is correct?
Fly.io service concurrency settings define two thresholds for load balancing. The soft_limit signals Fly's proxy to prefer routing new requests to less-loaded machines. The hard_limit is the maximum — once reached, the machine stops accepting new connections and Fly routes traffic elsewhere. Setting these correctly prevents any single machine from being overwhelmed and enables smooth horizontal scaling.