Cloudflare Containers vs Fargate vs Fly: The Meter You Cannot Turn Off
At half an hour of work a day, all three container meters land within seven cents of each other. What separates them is whatever has to stay awake to receive the request: $5 for a Worker, cents for a stopped Fly machine, $16.43 a month for a load balancer before the container starts.
The interesting question about these three is not which one runs a container faster. It is what is still on the bill at 4am when nobody has sent a request.
All three meter compute by the second or finer, and for intermittent work they land in nearly the same place. The spread is in the parts that never sleep, and in one shape rule that decides how much memory you are allowed to not use. Rates below came off the Cloudflare docs, the Fly pricing page, and the AWS price list on 23 August 2026, all for the US East region.
Three rate cards
| Compute | Memory | Storage | |
|---|---|---|---|
| Cloudflare Containers | $0.000020 per vCPU-second, billed on CPU actually used | $0.0000025 per GiB-second, billed on provisioned | $0.00000007 per GB-second, provisioned |
| AWS Fargate, Arm | $0.03238 per vCPU-hour | $0.003560 per GB-hour | 20 GB included, $0.000111 per GB-hour after |
| Fly Machines | Bundled into the machine size, performance-1x at $32.19 a month | Bundled, roughly $5 per GB per 30 days above the size | Volumes at $0.15 per GB-month |
Cloudflare’s container billing runs in 10ms slices and stops when the instance sleeps. Since November 2025 the CPU line is metered on CPU actually used rather than on what the instance type allocates, which is a real discount: the docs’ own worked example puts an hour of standard-2 at 20% CPU at $0.0144 instead of $0.072. Memory and disk stayed on provisioned.
That split is the thing to hold onto, because it interacts badly with the next table.
The shape rule is the part nobody reads
Cloudflare’s containers come in six sizes, and custom sizes have constraints.
| Instance type | vCPU | Memory | Disk |
|---|---|---|---|
| lite | 1/16 | 256 MiB | 2 GB |
| basic | 1/4 | 1 GiB | 4 GB |
| standard-1 | 1/2 | 4 GiB | 8 GB |
| standard-2 | 1 | 6 GiB | 12 GB |
| standard-3 | 2 | 8 GiB | 16 GB |
| standard-4 | 4 | 12 GiB | 20 GB |
A custom instance type must have at least 1 vCPU, at most 4, at most 12 GiB of memory, and a minimum of 3 GiB of memory per vCPU. Below 1 vCPU you take one of the fixed sizes.
So a full vCPU with 2 GiB of memory is not something you can ask for. The smallest one-vCPU shape is standard-2, which brings 6 GiB and 12 GB of disk with it, and both are billed on what is provisioned rather than what you touch. Run that around the clock at 20% CPU and the bill is $39.20 of memory, $10.06 of CPU, and $2.16 of disk. The generous meter is attached to the small number.
The same always-on service on Fargate Arm at the 1 vCPU and 2 GB you actually wanted is $28.84 a month, and at 1 vCPU and 6 GB it is $39.23. Fly’s performance-1x is 1 vCPU and 2 GB for $32.19. For continuous work the three are within a third of each other, and the winner depends on how much memory the platform makes you buy.
Intermittent work is where they separate, and not in the direction the marketing implies. At 30 minutes of container time a day with the CPU busy 20% of it, Cloudflare’s included allowances swallow the CPU and disk lines entirely and the bill is 60 cents of memory. The identical Fargate task, started by EventBridge and stopped when it finishes, is also 60 cents. Per-second billing is per-second billing.
What stays awake
This is where the real difference lives, and it is not a container charge at all.
On Cloudflare, the thing listening is a Worker, and Containers require the Workers Paid plan at $5 a month; the Free plan lists no container allowance at all. The request arrives at the Worker, the Worker wakes the container, the container sleeps again after a timeout. There is no load balancer to pay for.
On Fly, a stopped Machine costs only its filesystem, at $0.15 per GB of rootfs per 30 days. A 3 GB image parked between bursts is 45 cents a month. The Anycast routing that wakes it is included rather than billed as a separate appliance.
On AWS, the container stops but the path to it does not. An Application Load Balancer is $0.0225 an hour, which is $16.43 a month before a single LCU. A NAT Gateway, which most private-subnet task definitions end up with, is $0.045 an hour, another $32.85 a month plus $0.045 per GB processed. A public IPv4 address is $0.005 an hour, $3.65 a month, whether the task is running or not. None of that shows up in a Fargate price comparison, and all of it is on the invoice.
For a service that works 30 minutes a day, the container costs the same everywhere and the front door costs $5, $0.45, or $49.28.
Egress, where an old claim has gone stale
Container egress on Cloudflare is not free, whatever you read in 2025. The published rate is $0.025 per GB in North America and Europe with 1 TB included per month, $0.05 for Oceania, Korea, and Taiwan with 500 GB included, and $0.04 everywhere else. Fly is $0.02 per GB to the internet in North America and Europe and $0.04 in Asia Pacific and South America. AWS is $0.09 per GB for the first 10 TB beyond the free tier, which is three to four times either of the others and the reason data-heavy services keep leaving.
The R2-style free egress people are thinking of applies to R2. It does not extend to a container’s outbound traffic.
How to pick, in one pass
If the workload is request-driven and idle most of the day, and the memory it needs fits the shape rules without waste, Cloudflare Containers is priced for exactly that, and the always-on floor is the $5 you were probably already paying for Workers. Check the instance table first: if your service wants a full vCPU and 1 GB, you will be paying for 6 GiB.
If it runs continuously, needs a VPC, IAM roles, or a compliance story that names AWS, Fargate on Arm is the cheapest continuous compute of the three and the network path is where you should spend your optimization effort, not the task size.
If you want machines you can place in named regions, stop between bursts, and reach without renting a load balancer, Fly is the smallest total bill for small always-reachable services, and its volume model (pinned to one machine) is the constraint to check before you build state on it.
Two related pieces are worth reading next to this one. For the case where you never wanted a container at all, Workers, Lambda, and Vercel bill three different quantities and the ranking flips depending on whether your code waits or computes. For the case where you want a platform rather than a runtime, PaaS pricing counts different things again.
The check that beats any of this: open last month’s bill and separate the container line from everything that had to stay awake to reach it. On one of these three, the second number is bigger than the first.