Machine Placement and Regional Capacity
When you scale an app on Fly.io, where your machines land depends on regional capacity. Here’s how to keep that from surprising you.
Let’s say you run fly scale count
and tell it to drop 10 machines into dfw
and 10 more into iad
. If either of those regions is out of capacity, the entire scale operation fails. Nothing gets placed. It’s all or nothing.
Most of the time this just works—dfw
and iad
are solid bets for region choices. But some regions, like sjc
, gru
, and bom
, tend to be in high demand. If you hardcode your placement into one of those and cross your fingers, you might find yourself scaling to zero.
How to check available capacity
Run fly platform regions
. You’ll get a list of regions and their available CPU cores. These aren’t guarantees, but they’re a decent snapshot of where you’re most likely to succeed.
Let the scheduler help
For individual machine operations like fly machine clone
or creating a new machine, you can give the scheduler some leeway. Instead of pinning a single region, you hand it a prioritized list or a geographic group. It tries each in order until it finds one that works.
For example:
fly machine clone -r "iad,dfw"
That says: try iad
, then fall back to dfw
.
Geographic groups and aliases
You can use geographic aliases like us
, eu
, or sa
to fan out across a broader area.
Alias | Area |
---|---|
eu |
Europe |
na |
North America |
sa |
South America |
us , usa |
United States |
Examples:
- Try London first, then fall back to anywhere in Europe:
lhr,eu
- Try any US region first, then Europe:
us,eu
- Try any North American region first, then any South American region:
na,sa
Scale commands don’t (yet) do this
Right now, flexible placement doesn’t apply to scale
, deploy
, or launch
. If you want to scale across regions with fallbacks, the supported way to do that is by cloning machines individually (or using fly machine create
), with region preferences.
(We know that’s a bit clunky. We’re working on it.)
Machines API support
If you’re driving placement from the Machines API (api.machines.dev
), all of this flexibility is available there: prioritized region lists, meta-regions, and any
placement.
A word on architecture
This only helps if your app actually works when deployed across multiple regions. That means not assuming low-latency connections between machines, and avoiding coordination patterns that only work in single-region setups.
Want to see where your app might run? Here’s the current list: ams, arn, atl, bog, bom, bos, cdg, den, dfw, ewr, eze, fra, gdl, gig, gru, hkg, iad, jnb, lax, lhr, mad, mia, nrt, ord, otp, phx, qro, scl, sea, sin, sjc, syd, waw, yul, yyz.