Hi Hauk,
Given your “exactly one” requirements, your best bet would be to not use the standby machine (here’s how to remove it: https://fly.io/docs/apps/app-availability/#standby-machines-for-process-groups-without-services). Instead, for resiliency (which I bet is also important), start two Fly machines, both live and running Redis, and set Redis up in a replica configuration. I don’t know if replica support is still behind Enterprise on Redis proper, but if it is, you can use Valkey where replicas are available out of the box.
The standby Fly machine will start if the primary’s host becomes unreachable due to hardware or network failure. Crucially it will not start if your machine itself becomes unavailable e.g. because it got stopped or destroyed.
If the host then returns from the dead, the standby machine will stop by itself after a relatively long period (I think it’s one hour).
If two can run at once, what’s the recommended way to enforce single-instance
You can always e.g. wrap Redis startup in some kind of shell script that ensures there’s no other instance running, but in general, this is handled at the application layer, not as a Fly platform feature.