Skip to content
Amazon S3
Sub-page 2 of 8
Cost & billing mechanics · Free

Understanding Request and Egress Economics Before Your Bill Surprises You

Decision drivers
  • Whether content is served directly to end users or only to internal/same-region AWS services
  • PUT-to-GET request ratio for the workload
  • Whether multipart upload is used, and whether abort-incomplete-upload lifecycle rules exist
  • Monthly egress volume relative to the 100 GB free tier and the ~750 GB/month rough breakeven point for adding CloudFront

Production premise

S3 pricing has dimensions that never show up on the "storage" line. Requests are billed by type: PUT/COPY/POST/LIST requests cost roughly 12.5x more per request than GET requests. Data transferred out to the internet is billed separately from storage entirely. The first 100 GB/month of that egress is free, aggregated across AWS services, with real per-GB rates beyond it.

Failure mode & inflection point

There are two distinct traps here, not one.

The first is egress. A public-facing bucket serving files directly to end users pays full internet egress on every byte. A service streaming 100 GB/day can run up hundreds of dollars a month in egress alone. Nothing warns you, because the storage line item looked cheap — the cost is invisible until the bill arrives.

The second is incomplete multipart uploads, and it is easy to miss entirely. An upload that failed partway, or an application that abandoned it, leaves its uploaded parts sitting in the bucket. Those parts are billed as stored bytes indefinitely, until someone explicitly cleans them up. There is no automatic expiration by default.

Production guardrail

Put CloudFront in front of any bucket serving content to end users. The origin fetch from S3 to CloudFront is free regardless of volume, and caching cuts how often that fetch happens at all.

This does not eliminate egress; it relocates it. CloudFront bills its own transfer to viewers, currently a shade cheaper than S3's direct rate in the US tier. The honest framing is "cheaper and cached," not "free." CloudFront's November 2025 flat-rate plans — including a $0 tier bundling 100 GB transfer, 1M requests, and WAF — make this an easy default for smaller sites specifically. Below roughly 750 GB/month, though, direct S3 can still come out cheaper on its own, since the shared 100 GB free tier covers proportionally more of a small workload's traffic.

Separately, set a lifecycle rule to abort incomplete multipart uploads after a set number of days on every bucket that accepts uploads. Treat it as a default, not an optimization you'll get to later.