Amazon CloudFront pricing explained: what you pay for a CDN in front

CloudFront is one of the few AWS services where adding a component can lower the total bill, and the reason is in the pricing structure. The CDN charges per GB of data transferred out to the internet, per request, and for a set of optional features, but the transfer from an AWS origin to CloudFront is free. That asymmetry is what makes fronting S3 with CloudFront cheaper than serving S3 directly in the right regions. The current rates are published on the Amazon CloudFront pricing page, and any specific number below is the us-east-1 first-tier rate as published at the time of writing. Region, price class, and tier all move the number, so confirm against the pricing page before modeling a real workload.

Data transfer out, tiered by region

Data transfer out to the internet is the dominant CloudFront line for most workloads, and it is tiered by volume per month and by edge region. In us-east-1, the first tier is $0.085 per GB for the first 10 TB as published, with lower per-GB rates as monthly volume grows. The per-region variance is large. North America and Europe are the cheapest edges. Asia, India, Australia, South America, the Middle East, and South Africa all carry higher per-GB rates, some meaningfully so. The region that serves a given user is what sets the rate, which is why the price class setting is the single biggest cost lever on the distribution.

HTTP and HTTPS requests

Every request served by CloudFront is billed, with separate rates for HTTP and HTTPS. HTTPS is the more expensive of the two because of the TLS termination cost. In us-east-1, the rate is on the order of $0.0100 per 10,000 HTTPS requests as published, with HTTP somewhat cheaper. For typical workloads the request charge is single-digit percent of the bill and the data transfer line is the rest, but APIs with small payloads and high request counts flip that ratio. Knowing which workload shape you have is the difference between tuning the right knob and the wrong one.

Origin fetches and transfer

CloudFront fetches from the origin on cache misses, and the transfer from the origin to CloudFront is what makes the S3 pattern work. When the origin is S3, EC2, or another AWS service in the same region, the origin to CloudFront hop is free. The origin still bills its own outbound data to CloudFront at zero, and CloudFront bills the user-facing egress at the edge rate. When the origin is outside AWS, you pay the origin provider for its outbound transfer and then CloudFront for the edge transfer, so the free hop only applies inside AWS.

The always-free tier

CloudFront has an always-free tier, distinct from the 12-month free tier that covers new accounts. As published on the pricing page, the always free tier includes 1 TB of data transfer out from CloudFront to the internet per month and 10 million HTTP or HTTPS requests per month, with no expiration tied to account age. For a low-traffic site or a documentation domain, the always-free tier can cover the entire workload indefinitely. The allowance is per-account, not per-distribution, so it applies across all of the distributions on the account.

Invalidations, logs, and edge compute

Beyond transfer and requests, three optional lines appear on the CloudFront bill. Object invalidations are free up to a monthly allowance as published and bill per path above that, so frequent full-distribution invalidations on a large catalog can add up. Real-time logs bill per minute per log stream and can grow quickly on a verbose global distribution, while standard access logs to S3 are free. Edge compute comes in two flavors: Lambda at the edge, which bills per request and per compute duration, and CloudFront Functions, which bills per invocation at a lower rate for lightweight request and response manipulation.

Price class is the main cost lever

Every distribution has a price class setting with three values. PriceClass_100 serves only from North America and Europe edges, the cheapest regions. PriceClass_200 adds Asia, India, and the Middle East. PriceClass_All uses every edge globally. The setting is a soft control: users outside the configured regions still get served, but their requests route from the nearest available edge inside the configured set. For B2B workloads concentrated in North America and Europe, PriceClass_100 usually cuts the blended per-GB rate without any user-visible latency. The deeper treatment of this trade-off is in CloudFront: the CDN line item that usually pays for itself.

Why fronting S3 with CloudFront reduces total cost

S3 egress directly to the internet is billed per GB at a higher rate than CloudFront egress in the cheap edge regions, and the S3 to CloudFront hop is free. Serving the same byte through CloudFront in a PriceClass_100 region therefore costs less than serving it directly from S3, before counting the latency win and the caching win. For workloads concentrated in the cheap edges, the CDN line is cheaper than going direct. The economics invert for traffic concentrated in a high-cost edge region where the CloudFront per-GB rate meets or exceeds the S3 egress rate, so the decision is region-dependent and worth modeling before committing. For the broader picture on egress economics, see Multi-cloud egress: when leaving AWS for cheaper egress actually pays.

Cloud Horizons shows CloudFront spend by distribution, price class, and origin alongside the rest of your AWS bill, so the per-region blended rate and the free-tier burn are visible as they accrue. See the features page for the full breakdown.