The decision depends on the route
An application that runs beside its storage has different requirements from one whose main job is distributing public files. Start with the application’s read path. If each end-user request goes directly to storage, public transfer charges matter immediately. If compute reads objects internally and returns a transformed result, the full path includes compute and potentially another transfer bill.
The CloudOverview model compares S3 Standard in N. Virginia with R2 Standard. It does not compare a complete AWS application with a complete Cloudflare application. CloudFront, Workers, KMS and transformations are outside this estimate. Add them when the architecture needs them.
Work through the same quantities
The default image workload stores 1,000 decimal GB, delivers 2,000 GB and makes 100,000 writes plus 10 million reads. Its S3 row converts bytes to binary billing units and includes direct internet transfer. R2 uses its Standard capacity and operation rules, including allowances and rounding. Both assume monthly allowances remain available.
| Service / pricing region | Storage | Delivery | Writes / reads | Minimum top-up | Total / month |
|---|---|---|---|---|---|
| Amazon S3US East · N. Virginia | USD 21.42 | 158.64 | 0.50 / 4.00 | 0.00 | USD 184.56 |
| Cloudflare R2Automatic placement / EU jurisdiction | USD 14.85 | 0.00 | 0.00 / 0.00 | 0.00 | USD 14.85 |
| Backblaze B2US / EU / Canada | USD 6.88 | 0.00 | 0.00 / 0.00 | 0.00 | USD 6.88 |
| WasabiAll commercial regions | Outside modelOutside the published egress policy. Obtain provider approval; no estimate shown. | ||||
| Bunny StorageOne storage region · EU/NA delivery | USD 10.00 | 20.00 | 0.00 / 0.00 | 0.00 | USD 30.00 |
| ScalewayParis · fr-par | EUR 16.06 | 19.25 | 0.00 / 0.00 | 0.00 | EUR 35.31 |
The full table provides context, but focus on the S3 and R2 component columns. Change only outbound traffic in the calculator and observe which component changes. Then restore traffic and change writes to just beyond one million. That second experiment exposes the R2 rounding boundary. These are cost-model experiments, not provider performance tests.
Examine integration costs
For an existing AWS application, list every S3-specific dependency before moving. If a migration requires changing permissions, event handling or an SDK operation, include that work in the decision. The compatibility checklist is designed to surface those dependencies before a bulk transfer.
For a new public-asset application, map the intended delivery and access-control path first. Evaluate a production-like custom-domain setup and private-access scenario if needed. Avoid treating a public development endpoint as evidence that the final architecture is ready.
Treat placement explicitly
S3’s calculator row is a specific AWS region. R2 has location hints and jurisdiction controls with different meanings. If location is a requirement, a cheap total does not settle the question. Follow the European storage guide and the profile sources to verify the configuration that meets your operational requirements.
A useful decision record
Record the chosen route, required operations, monthly quantities, dataset version and excluded services. Add one normal month, one high-download month and one high-operation month. Note which assumptions came from measured application usage and which are projections.
Choose only after the required behavior is demonstrated in your own environment. A lower modeled storage bill is a reason to test an alternative, not an instruction to migrate regardless of integration effort. Read the S3 profile and R2 profile for the exact pricing and API sources checked for this release.