Mathieu Kerbel
All articles

Amazon CloudFront: pricing, price classes and how to cut the bill

By Mathieu Kerbel
Share on LinkedIn

Key facts

Points of presence
750+ in 100+ cities across 50+ countries, peered with internet service providers' networks [39]
Origin fetches
Free from any AWS origin: Amazon S3, Amazon EC2, Elastic Load Balancing, origins in private subnets [37]
Price classes
3: All, the default, then 200 and 100: fewer edge locations, the least expensive ones [37]
Free tier
1 TB of data out and 10 million requests every month, one free tier per organization [38]
Flat-rate plans
No overage charges: Free, Pro, Business and Premium: one monthly price per distribution, AWS WAF included [5]
Invalidations
1,000 paths free a month for the whole account, then billed per path; a path with a * wildcard counts as one [16]

Amazon CloudFront delivers content from a worldwide network of edge locations and bills each GB it sends and each request it answers, at the rates of the geographic group of the edge location that serves the viewer. Two other bills sit beside that one: the origin's, which a good cache shrinks, and a flat-rate plan's, which can replace the pay-as-you-go bill of a distribution altogether. This article explains how CloudFront works under the hood, how CloudFront pricing works line by line and how to reduce CloudFront costs, with the list prices of CloudFront's edge locations and of origins in the Paris Region (eu-west-3), and prices four architectures before and after the levers.

Prices in this article are AWS list prices in USD before tax, from the AWS Price List. CloudFront is a global service: its own prices are those of its edge locations, by geographic group, and this article uses the Europe group unless a table says otherwise. There is no Paris price for CloudFront itself; the origins (Amazon S3, the load balancer, data out to the internet) are priced in the EU (Paris) Region, and the flat-rate plans, AWS WAF and Amazon Route 53 have global prices. The offer files and their publication dates are listed in the Sources section, and each table repeats the dates of its own prices. CloudFront's tiers count a TB as 1,024 GB, and object sizes are binary (KiB, MiB). Monthly amounts (730 hours), totals, percentages and break-evens are computed from these prices.

What Amazon CloudFront is

In AWS's words, "Amazon CloudFront is a web service that speeds up distribution of your static and dynamic web content, such as .html, .css, .js, and image files, to your users. CloudFront delivers your content through a worldwide network of data centers called edge locations." What you configure is a distribution: "You create a CloudFront distribution to tell CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery." What an edge location does not have, CloudFront fetches "from an origin that you've defined—such as an Amazon S3 bucket, a MediaPackage channel, or an HTTP server (for example, a web server) that you have identified as the source for the definitive version of your content", and "There is no additional charge to use a custom origin". Each part of a distribution moves a different line of the bill:

The parts of a CloudFront distribution, and the line of the bill each one moves

Part, and what it is What it moves on the bill
Distribution: where the content comes from and how it is delivered; its configuration, not its content, goes to every edge location The unit of a flat-rate plan: one plan per distribution
Origin: an S3 bucket, a load balancer, an HTTP server The origin's own bill: fetches from an AWS origin are not charged, the origin's requests and compute are
Cache key and time to live: what makes two requests the same object, and how long it stays cached How many requests reach the origin
Edge location: where a viewer is served The geographic group whose rates bill the bytes and the requests
Price class: which edge locations may serve the distribution Which groups, and so which rates, the bill can include

The pay model has two forms. Pay-as-you-go first: "Like other AWS services, Amazon CloudFront is a self-service, pay-per-use offering, requiring no long term commitments or minimum fees", and in the developer guide's own summary, "CloudFront charges for data transfers out from its edge locations, along with HTTP or HTTPS requests. Pricing varies by usage type, geographical region, and feature selection." Then the plans: "CloudFront flat-rate pricing plans combine the Amazon CloudFront global content delivery network (CDN) with multiple AWS services and features into a monthly price with no overage charges, regardless of traffic spikes or attacks". The free tier is left out of the computed bills and priced once, in its own section.

How CloudFront works under the hood

AWS documents CloudFront at the level of edge locations, regional edge caches, Origin Shield, the cache key, the time to live and what goes to the origin. It does not document the cache servers themselves, their storage or how routing picks one location over another, so this article does not either. Each part it does document is a line of the bill, or decides one.

Edge locations, and how a viewer reaches one

"CloudFront Points of Presence are situated within the AWS network and peer with internet service provider (ISP) networks. CloudFront has 750+ POPs in 100+ cities across 50+ countries". A request starts with DNS: "DNS routes the request to the CloudFront POP (edge location) that can best serve the request, typically the nearest CloudFront POP in terms of latency", and "CloudFront speeds up the distribution of your content by routing each user request through the AWS backbone network to the edge location that can best serve your content" (What is Amazon CloudFront?). Inside the ISPs' own networks sit embedded POPs:

AWS says

1,140+ embedded POPsin addition to CloudFront's POPs, situated within internet service providers' networks, closest to end viewers, across 300+ cities in North America, South America, Europe, Asia and Oceania.

AWS · Amazon CloudFront features

They are "an opt-in capability intended for the delivery of large scale cacheable traffic", "custom built to deliver large scale live-streaming events, video-on-demand (VOD), and game downloads", and there is "no additional charge for using CloudFront embedded POPs".

The edge location decides the rates. CloudFront's data and request usage types carry a two-letter code for where they were served, from "EU: Europe and Israel" to "ZA: South Africa" (Interpret your AWS bill and usage reports for CloudFront), and the FAQ adds that "your data transfer usage is totaled separately for specific geographic regions, and then cost is calculated based on pricing tiers for each area." A viewer is billed where it is served, not where it lives: price classes change which edge locations may serve it.

A request's path: hit, miss and the regional edge caches

"CloudFront checks its cache for the requested object. If the object is in the cache, CloudFront returns it to the user." If it is not, CloudFront "compares the request with the specifications in your distribution and forwards the request to your origin server for the corresponding object" (How CloudFront delivers content), and it does not wait for the whole file: "As soon as the first byte arrives from the origin, CloudFront begins to forward the object to the user. CloudFront also adds the object to the cache for the next time someone requests it." Between the edge locations and the origin sits a second layer, the regional edge caches, "located between your origin server and the POPs—global edge locations that serve content directly to viewers":

How CloudFront answers a requestA viewer's request reaches the nearest CloudFront edge location. On a miss, the edge location asks a regional edge cache, then, if it is enabled, Origin Shield, and only then the origin in the Paris Region: an S3 bucket for files, an Application Load Balancer for dynamic pages, which go from the edge location straight to the origin.Amazon CloudFrontRegion eu-west-3 (Paris)ViewersEdge locationRegionaledge cacheOrigin Shield(optional)ApplicationLoad BalancerS3 bucket12345
How CloudFront answers a request
  1. DNS routes each request to the edge location that can best serve it, typically the nearest in latency. CloudFront bills there, by the edge location's geographic group: data out to the internet, $0.085 per GB for the first 10 TB a month in Europe, and each request, $0.012 per 10,000 HTTPS requests.
  2. On a miss, the edge location asks its regional edge cache, a larger cache that keeps less popular objects longer, shared by the edge locations around it. It has no charge of its own.
  3. Origin Shield, when it is enabled, adds one more cache in the AWS Region closest to the origin. Each dynamic request, and each cacheable request that reaches it from a regional edge cache in another Region, costs $0.009 per 10,000 in Frankfurt, London or Ireland.
  4. Origin fetches from an AWS origin are free: data out of Paris to CloudFront is $0.00 per GB. When the bucket is in the Region of the regional edge cache, the edge location skips that cache.
  5. Dynamic requests, and PUT, POST, PATCH, OPTIONS and DELETE, go from the edge location straight to the origin. Data sent to the origin is billed: $0.02 per GB from Europe.

"Regional edge caches have a larger cache than an individual POP, so objects remain in the cache longer at the nearest regional edge cache location." On a miss, "the POP typically goes to the nearest regional edge cache to fetch it", and what comes back from the origin is cached at both levels: "This makes sure that all of the POPs in a region share a local cache, eliminating multiple requests to origin servers." Some requests skip that layer: "Proxy HTTP methods (PUT, POST, PATCH, OPTIONS, and DELETE) go directly to the origin from the POPs and do not proxy through the regional edge caches", "Dynamic requests, as determined at request time, do not flow through regional edge caches, but go directly to the origin", and "When the origin is an Amazon S3 bucket and the request's optimal regional edge cache is in the same AWS Region as the S3 bucket, the POP skips the regional edge cache and goes directly to the S3 bucket." The layer costs nothing extra, in the FAQ's words: "There are no additional charges to use this feature." Simultaneous misses are merged too: "Amazon CloudFront also uses techniques such as collapsing simultaneous viewer requests at an edge location for the same file into a single request to your origin server."

The share of requests served from a cache has a name: "The proportion of requests that are served directly from the CloudFront cache compared to all requests is called the cache hit ratio". A hit brings, in AWS's words, "Reduced load on your origin server" and "Reduced latency for the viewer" (Control the cache key with a policy). What it does not change is CloudFront's data out and requests: the price list prices each viewer request and each GB delivered, with no rate for a hit or for a miss. Two CloudFront fees are charged on misses only, and shrink as the hit ratio grows: Origin Shield's request fee, whose formula AWS multiplies by "(1 – cache hit rate)" (Origin Shield), and a Lambda@Edge function on origin events, since on an origin request "When the requested object is in the CloudFront cache, the function doesn't execute" (CloudFront events that can trigger a Lambda@Edge function). So, read from the price list, the cache hit ratio lowers the origin's bill, and CloudFront's only where those two are configured:

What a cache hit and a cache miss each put on the bill
CloudFront
The request and the bytes delivered, at the edge location's rates
The origin
Nothing: no request, no compute, no load balancer capacity
From the origin to CloudFront
Nothing travels
The viewer
Lower latency
CloudFront
The same request and bytes, at the same rates, plus Origin Shield's request fee and Lambda@Edge on origin events, where configured
The origin
A request, its compute, its load balancer capacity
From the origin to CloudFront
Free from an AWS origin ($0.00 per GB out of Paris); billed by the provider of an origin outside AWS
The viewer
The time of the fetch

What differs: the origin's bill and the latency; CloudFront's data out and requests are the same for a hit and a miss, and only its fees on misses, Origin Shield and Lambda@Edge on origin events, fall with the hit ratio.

Origin Shield, one more cache in front of the origin

"CloudFront Origin Shield is an additional layer in the CloudFront caching infrastructure that helps to minimize your origin's load, improve its availability, and reduce its operating costs". "When you use Origin Shield, all requests from all of the CloudFront caching layers to your origin go through Origin Shield, increasing the likelihood of a cache hit. Requests that are made in the same Region as your origin will bypass Origin Shield." Its own misses are merged: "Requests for content that is not in Origin Shield's cache are consolidated with other requests for the same object, resulting in as few as one request going to your origin", which "can reduce costs for things like just-in-time packaging, image transformations, and data transfer out (DTO)."

It is set per origin, "Origin Shield is a property of the origin", in one of the Regions where CloudFront has a regional edge cache: "You should choose the AWS Region that has the lowest latency to your origin", and for an origin in such a Region, "enable Origin Shield in the same Region as your origin." Europe (Paris) is in that list, but the AWS Price List has no Origin Shield row for it: this article prices Origin Shield at its Frankfurt, Ireland and London rows and gives Paris no number (Origin Shield, invalidations, edge compute and logs). AWS names the cases on each side:

Where AWS says Origin Shield fits, and where it may not

Fits May not fit
"Viewers that are spread across different geographical regions" "dynamic content that is proxied to the origin"
"Origins that provide just-in-time packaging for live streaming or on-the-fly image processing" "content with low cacheability"
"On-premises origins with capacity or bandwidth constraints" "content that is infrequently requested"
"Workloads that use multiple content delivery networks (CDNs)"

How it is billed, with two examples, is in the pricing section.

The cache key and the time to live: what makes a hit

"The cache key is the unique identifier for every object in the cache, and it determines whether a viewer's HTTP request results in a cache hit", and "Including fewer values in the cache key increases the likelihood of a cache hit." The rule for what goes in it (Understand the cache key): "When a value in the viewer request determines the response that your origin returns, you should include that value in the cache key. But if you include a value in the cache key that doesn't affect the response that your origin returns, you might end up caching duplicate objects." Cookies multiply the copies: "For the cookies that you configure CloudFront to forward to your origin, CloudFront forwards every combination of cookie name and value. It then separately caches the objects that your origin returns, even if they're all identical"; with two cookies of three values each, "CloudFront forwards up to nine different requests to your origin for each object" (cache hit ratio). The same page asks to "forward only the query string parameters for which your origin will return unique objects" and to "avoid caching based on request headers that have large numbers of unique values". What the origin needs to see without splitting the cache goes in an origin request policy: "Origin request policies are separate from cache policies, which control the cache key. This way, you can receive additional information at the origin and also maintain a good cache hit ratio".

How long an object stays: "By default, each file stays in an edge location for 24 hours before it expires. The minimum expiration time is 0 seconds; there isn't a maximum expiration time", and "To increase your cache hit ratio, you can configure your origin to add a Cache-Control max-age directive to your objects, and specify the longest practical value for max-age" (cache hit ratio). A long time to live is a ceiling, not a promise: "If a file in an edge location isn't frequently requested, CloudFront might evict the file—remove the file before its expiration date—to make room for files that have been requested more recently". Two of the managed cache policies set both at once:

Two managed cache policies, what they put in the cache key and how long they cache

Policy Cache key, and time to live
CachingOptimized No query strings or cookies; it "only includes the normalized Accept-Encoding header". Cached 1 second at least, 24 hours by default, 365 days at most
CachingDisabled "This policy disables caching": it "is useful for dynamic content and for requests that are not cacheable"

The bill sees the time to live too. Usage types split the bytes and requests of objects cached an hour or more from the others, at the same price (Interpret your AWS bill), and Origin Shield counts "GET and HEAD requests that have a time to live (TTL) setting of less than 3600 seconds" among its dynamic requests, each of which it bills (Use Amazon CloudFront Origin Shield).

What reaches the origin, and what it costs

Fetches from an AWS origin are not billed: "Free for origin fetches from any AWS origin such as Amazon Simple Storage Service (S3), Amazon Elastic Compute Cloud (EC2), or Elastic Load Balancers, including origins in private subnets through VPC origins". The rest of the traffic between CloudFront and an origin is billed by someone, in the pricing page's words:

What crosses between CloudFront and the origin, and who bills it

Traffic Billed
Origin fetches from an AWS origin Not charged
Origin fetches from an origin outside AWS By its provider: "You are responsible for the separate fees you accrue for your origin server"
Traffic to CloudFront that is not an origin fetch, such as multi-CDN traffic By the AWS service it leaves, at "their respective regional data transfer out charges"
Data CloudFront sends to the origin: POST and PUT bodies, WebSocket and gRPC traffic from the client By CloudFront, per GB, at "the regional data transfer out to origin rates"

A 304 is not free either: "A 304 is a response to a conditional GET request and will result in a charge for the HTTP/HTTPS request and the Data Transfer Out to Internet". And compression happens at the edge, on the very bytes CloudFront bills: "the cost of CloudFront data transfer is based on the total amount of data served. Serving compressed objects can be less expensive than serving them uncompressed".

CloudFront Functions and Lambda@Edge

Code can run at the edge in two ways, limited and priced differently (Differences between CloudFront Functions and Lambda@Edge, pay-as-you-go pricing):

CloudFront Functions and Lambda@Edge, side by side
Made for
Cache key normalization, header manipulation, URL redirects or rewrites, request authorization
Scale
Up to millions of requests per second, each in under a millisecond, with 2 MB of memory
Price
$0.10 per million invocations, the first 2 million a month free
On a flat-rate plan
Included
Made for
Functions that take several milliseconds or more, that call external services over the network, or that read the body
Scale
Up to 10,000 requests per second per Region
Price
$0.60 per million requests run in Paris, plus the duration per GB-second; no free tier
On a flat-rate plan
Billed on a pay-as-you-go basis

What differs: per million calls, $0.10 against $0.60 before Lambda@Edge's duration, and what the code may do in that time.

For 100 million invocations a month, CloudFront Functions cost $10.00, the free 2 million not deducted; Lambda@Edge costs $60.00 in requests, plus its duration at $0.00005001 per GB-second in Paris: $0.63 at 1 ms with 128 MB of memory, $3.13 at 5 ms, $6.25 at 10 ms, computed. Lambda@Edge does not run at the edge location itself but "in a regional edge cache (usually in the AWS region closest to the CloudFront edge location reached by the client)", and "There is no free tier for Lambda@Edge at this time." Lambda@Edge is "an extension of AWS Lambda", billed like it per request and per GB-second; the AWS Lambda article prices Lambda itself in Paris.

What CloudFront is used for

AWS's ways to use CloudFront, with the cases its FAQ, its pricing page and the S3 guide add, each move a different line of the bill:

Use cases AWS lists for Amazon CloudFront, and the line of the bill each one moves

Use case, in AWS's words What it means for the bill
"static content (for example, images, style sheets, JavaScript, and so on)" Long times to live: CloudFront's price per GB against the origin's, few requests to the origin
"video on demand (VOD) streaming", and live streaming Large volumes: the tiers of each geographic group, and Origin Shield in front of packaging origins
"customizing the content and experience for viewers" with code at the edge CloudFront Functions or Lambda@Edge, billed on every request they run on
Private content, with signed URLs or signed cookies and origin access control A private origin, so every byte goes through CloudFront
"popular website images, videos, media files or software downloads" Large objects: the saving per GB outweighs the request fee
"any publicly accessible web application" Dynamic answers too: request fees on every call, or a flat-rate plan
A static website on S3 encrypted with SSE-KMS A distribution is required, because "SSE-KMS doesn't support anonymous users"

The fifth row is the CloudFront FAQ's "frequently accessed static content that benefits from edge delivery", the sixth the pricing page's, which also says "Your content can be static, dynamically generated and cacheable, or non-cacheable content — all three will benefit from improved performance, security, and availability." The last is the S3 website hosting guide's, for a website whose bucket uses SSE-KMS.

CloudFront, or data straight out of the origin

Serving viewers through CloudFront instead of straight from an S3 bucket, an instance or a load balancer in Paris changes two lines. The first is the price per GB: CloudFront's Europe edge locations bill less than data out of Paris at every tier, and the gap widens with volume:

Data out to the internet per GB, by monthly tier: straight out of Paris (eu-west-3), or through CloudFront's Europe edge locations

Monthly tierOut of Paris, per GBThrough CloudFront, Europe, per GBChange, computed
First 10 TB$0.09$0.0855.6% less
Next 40 TB$0.085$0.085.9% less
Next 100 TB$0.07$0.0614.3% less
150 TB to 500 TBParis: one rate over 150 TB$0.05$0.0420.0% less
500 TB to 1 PB$0.05$0.0340.0% less
1 PB to 5 PB$0.05$0.02550.0% less
Over 5 PB$0.05$0.0260.0% less

USD, before tax. AWS Price List, eu-west-3 and Europe edge locations, offer files published September 16, 2026 and October 3, 2026, fetched October 16, 2026.

The two ladders do not count the same GB. Paris's tiers add up the account's data out across services, since "Rate tiers take into account your aggregate usage for Data Transfer Out to the Internet across Amazon EC2, Amazon S3" and the other services the page lists (the EC2 article lists data out of Paris with EC2's other charges); CloudFront's add up each geographic group's GB on its own. The second line goes the other way: an HTTPS request through CloudFront in Europe costs $0.012 per 10,000 requests, 2.86 times an S3 GET request in Paris, computed, and a load balancer bills its capacity units, not requests (Elastic Load Balancing pricing). So the object size decides, at the first tiers:

Object size above which CloudFront costs less than serving straight from the origin, at the first tiers (computed)

Origin in Paris, and what CloudFront serves from its cache Break-even object size
S3 bucket, 90% of the requests from the cache 172.4 KiB
S3 bucket, 95% of the requests 168.0 KiB
S3 bucket, 99% of the requests 164.5 KiB
Application Load Balancer, nothing cached 251.7 KiB
Application Load Balancer, 95% of the bytes from the cache 96.9 KiB

Computed from the AWS Price List, eu-west-3 and Europe edge locations, offer files published September 11, 2026, September 16, 2026, October 3, 2026 and October 15, 2026, fetched October 16, 2026.

How to read it: above that size, the saving per GB outweighs the request fee. For the load balancer, processed bytes are taken as its highest capacity dimension, so each GB it no longer processes also saves one LCU-hour of capacity, $0.0084, which is why caching moves its break-even so far. The S3 article works the same sums for public reads, and AWS's own sentence says when the GB wins:

Using CloudFront can be more cost effective if your users access your objects frequently because, at higher usage, the price for CloudFront data transfer is lower than the price for Amazon S3 data transfer.

AWS, Use various origins with CloudFront distributions

Price is not AWS's only argument. Its pricing page says CloudFront "delivers fast experiences by shortening and eliminating costly round trips to establish connections in region, including for dynamic, uncacheable workloads like APIs" (Amazon CloudFront pricing); this article does not price latency. And a flat-rate plan changes the sums again: within its allowance, a request costs nothing more.

In short: Through CloudFront, a GB from Europe costs less than the same GB out of Paris at every tier, and a request costs more than an S3 GET: large objects come out ahead, small ones can cost more on pay-as-you-go, and a flat-rate plan removes the request fee within its allowance.

How CloudFront pricing works

What a CloudFront bill is made of

The pay-as-you-go pricing page lists more charges than the FAQ's "five areas", and this article follows the page. Line by line:

The lines of a CloudFront bill, and how each is billed

Line Billed
Data out to the internet Per GB, by geographic group of edge locations and monthly tier
HTTP and HTTPS requests Per 10,000, by geographic group, every method
Data out to the origin Per GB, by geographic group: the bodies of POST, PUT and the other methods forwarded to the origin
Origin Shield Per 10,000 requests, at the rate of the Origin Shield Region
Invalidations Per path, beyond the first 1,000 of the month
Edge compute CloudFront Functions per invocation; Lambda@Edge per request and per GB-second
Real-time access logs Per log line published
Dedicated IP certificates, Anycast static IPs, field-level encryption Per certificate a month, per address, per request
Flat-rate plan Per distribution and month, instead of the lines above that it covers
The origin By its own service: Amazon S3, Amazon EC2, Elastic Load Balancing, or its provider outside AWS

"There is no additional charge for sending data over WebSocket or gRPC protocols", the page adds. Put together, a small month looks like this:

One distribution serving 1 TB and 10 million HTTPS requests a month from its Europe edge locations Illustrative

Viewers in Europe, files from an S3 bucket in Paris whose own lines are not counted.

Where the month goes: network $99.04, total $99.04 a month.

LineA month
Network$99.04
Data out to the internet, first 10 TB tier1,024 GB × $0.085 /GB$87.04
HTTPS requests10,000,000 requests × $0.012 /10K req$12.00
Not counted
The CloudFront free tier, which covers this month exactly: 1 TB and 10 million requests—
The bucket's storage and GET requests—
A month, computed$99.04

USD before tax, 730 h a month. AWS Price List, Europe edge locations, offer file published October 3, 2026, fetched October 16, 2026. Illustrative configuration, not a client case.

Data out, by geographic group

There is no Paris price for CloudFront: the price list prices its data out by the geographic group of the edge location, eight groups on the pricing page and ten codes on the bill. "Usage tiers for data transfer are measured separately for each geographic region" (Amazon CloudFront FAQs). At the first tier, the groups of Price Class 100 cost least. The chart puts each group under the price class that adds it, cheapest first within each:

CloudFront data out to the internet, first 10 TB a month, by geographic group of edge locations, under the price class that adds each group

Geographic groupList price, per GB
Price Class 100
United States, Mexico, CanadaLeast expensiveCodes US and CA$0.085
Europe, Israel, TürkiyeLeast expensiveCode EU$0.085
Added by Price Class 200
IndiaCode IN$0.109
South Africa, Kenya, Nigeria, Egypt, Middle EastCodes ZA and ME$0.11
JapanCode JP$0.114
Asia PacificHong Kong, Indonesia, Philippines, Singapore, South Korea, Taiwan, Thailand, Malaysia, Vietnam · code AP$0.12
Added by Price Class All
South AmericaCode SA$0.11
Australia, New ZealandCode AU$0.114

USD, before tax. AWS Price List, United States edge locations, Europe edge locations, India edge locations, South Africa edge locations, Japan edge locations, Asia Pacific edge locations, South America edge locations and Australia edge locations, offer file published October 3, 2026, fetched October 16, 2026.

A TB a month costs $87.04 from Europe or North America and $122.88 from Asia Pacific, computed: per GB, Asia Pacific costs 41.2% more than Europe and Japan 34.1% more. The groups do not fall at the same pace with volume, and their requests are not all priced alike (the rows in the chart's order):

Each geographic group: the next two tiers per GB, and HTTPS requests per 10,000

Group Next 40 TB Next 100 TB HTTPS
North America $0.08 $0.06 $0.01
Europe $0.08 $0.06 $0.012
India $0.085 $0.082 $0.012
Middle East, South Africa, Kenya, Nigeria, Egypt $0.105 $0.09 $0.012
Japan $0.089 $0.086 $0.012
Asia Pacific $0.10 $0.095 $0.012
South America $0.105 $0.09 $0.022
Australia $0.098 $0.094 $0.0125

USD, before tax. AWS Price List, United States edge locations, Europe edge locations, India edge locations, South Africa edge locations, Japan edge locations, Australia edge locations, Asia Pacific edge locations and South America edge locations, offer file published October 3, 2026, fetched October 16, 2026.

An HTTPS request costs 16.7% less in North America than in Europe, and 83.3% more in South America, computed. Europe's ladder goes further than the table, down to $0.02 per GB over 5 PB a month (the chart of the previous section shows every rung). Below the list, "Customers willing to make minimum traffic commits of typically 10 TB/month or higher are eligible for discounted pricing" (pay-as-you-go pricing); no such price is in the Price List, so none is given here.

Requests, and data sent to the origin

"You will be charged for number of HTTP/HTTPS requests made to Amazon CloudFront for your content" (Amazon CloudFront FAQs). The price list splits GET and HEAD requests from the methods CloudFront forwards to the origin, "Number of HTTPS DELETE, OPTIONS, PATCH, POST, and PUT requests that CloudFront forwards to your origin or edge function" (Interpret your AWS bill); in Europe both cost $0.012 per 10,000 requests over HTTPS. HTTP requests cost $0.009 per 10,000 requests, but serving over HTTP to save on requests gives up the encryption of every request, and this article does not suggest it. The bodies those methods carry are billed as data to the origin: $0.02 per GB from Europe and North America; $0.06 per GB from Japan, Asia Pacific, and the Middle East, South Africa, Kenya, Nigeria and Egypt; $0.08 per GB from Australia; $0.125 per GB from South America; and $0.16 per GB from India. The free tier does not cover them: "All other usage types (eg. Invalidations, Proxy requests, Lambda@edge, Origin shield, Data Transfer to Origin etc.) are excluded from the free tier."

Price classes

"Price classes provide you an option to lower the prices you pay to deliver content out of Amazon CloudFront. By default, Amazon CloudFront minimizes end-user latency by delivering content from its entire global network of edge locations. However, because we charge more where our costs are higher, this means that you pay more to deliver your content with low latency to end users in some locations". There are three, one inside the other:

Price classes: which edge locations serve a distributionThree nested price classes. Price Class 100 holds the edge locations of North America and of Europe, Israel and Türkiye; Price Class 200 adds Japan, Asia Pacific, India, and the Middle East, South Africa, Kenya, Nigeria and Egypt; Price Class All, the default, adds South America and Australia and New Zealand.Price Class All (default)Price Class 200Price Class 100United States,Mexico, CanadaEurope, Israel,TürkiyeJapanAsia PacificIndiaMiddle East,4 African countriesSouthAmericaAustralia,New Zealand1234
Price classes: which edge locations serve a distribution
  1. Price Class 100 keeps the least expensive groups: North America, and Europe, Israel and Türkiye, both $0.085 per GB for the first 10 TB a month.
  2. Price Class 200 adds, per GB for the first 10 TB a month: Japan ($0.114); Asia Pacific, that is Hong Kong, Indonesia, the Philippines, Singapore, South Korea, Taiwan, Thailand, Malaysia and Vietnam ($0.12); India ($0.109); the Middle East, South Africa, Kenya, Nigeria and Egypt ($0.11).
  3. Price Class All, the default, adds South America ($0.11 per GB, and $0.022 per 10,000 HTTPS requests) and Australia and New Zealand ($0.114 per GB).
  4. With a smaller class, viewers elsewhere are served by edge locations inside it, at those locations' rates, and may see higher latency; when an edge location outside the class serves a request, CloudFront charges the rate of the least expensive location in the class.

The bill follows the edge location that serves: "You will only be charged fees specific to the edge locations from which the content was actually delivered within the selected price class. From time to time, your content may be served from an edge location that is not included in your price class. In these cases, Amazon CloudFront will only charge you the rate for the least expensive location in your selected price class." The price is latency: "some of your viewers, especially those in geographic locations that are not in your price class, may experience higher latency than if your content were being served from all Amazon CloudFront locations." The setting is per distribution: "Choose the price class that corresponds with the maximum price that you want to pay for CloudFront service. By default, CloudFront serves your objects from edge locations in all CloudFront Regions". One feature needs the whole network: for Anycast static IPs, "you must select Use all edge locations for the price class for the distribution". Which edge location of a smaller class serves a viewer from outside it is AWS's routing, not a documented table, so pattern 3 states its assumption and tries another.

Flat-rate plans

The plans sell a distribution by the month instead of by the GB and the request. "Flat-rate pricing plans include the following features for a simple monthly price": the CloudFront CDN, AWS WAF and DDoS protection, bot management and analytics, Amazon Route 53 DNS, Amazon CloudWatch Logs ingestion, a TLS certificate, serverless edge compute and Amazon S3 storage credits each month. "Plans don't require an annual commitment to get the best available rates", "Each pricing plan covers one CloudFront distribution with up to one apex (root) domain", and the price does not change with geography: "Each flat-rate plan includes global content delivery for one simple price" (Amazon CloudFront FAQs). The plans have an offer of their own in the AWS Price List, with their prices and their allowances, nine levels from Free to Premium at its 600 TB level:

CloudFront flat-rate plans, their monthly allowance, and what that allowance costs on pay-as-you-go in Europe (computed)

Plan, and its price a month Monthly allowance The allowance on pay-as-you-go, computed
Free, $0.00 1 million requests, 100 GB $9.70
Pro, $15.00 10 million requests, 50 TB $4,159.20
Business, $200.00 125 million requests, 50 TB $4,297.20
Premium, $1,000.00 500 million requests, 50 TB $4,747.20
Premium, 75 TB level, $1,450.00 750 million requests, 75 TB $6,583.20
Premium, 125 TB level, $2,250.00 1.25 billion requests, 125 TB $10,255.20
Premium, 200 TB level, $3,500.00 2 billion requests, 200 TB $14,739.20
Premium, 350 TB level, $6,000.00 3.5 billion requests, 350 TB $22,683.20
Premium, 600 TB level, $10,000.00 6 billion requests, 600 TB $34,899.20

Computed from the AWS Price List, Europe edge locations and global, offer files published September 11, 2026 and October 3, 2026, fetched October 16, 2026.

The last column prices the whole allowance, data on the Europe ladder and HTTPS requests, so it is what the allowance's data and requests cost at the Europe rates. Served from costlier groups, or with the web ACL, the hosted zone and the log ingestion a plan also covers, the same usage costs more on pay-as-you-go. A distribution uses part of its allowance, and the comparison that counts is with its own pay-as-you-go bill, as in the patterns. Each plan also gives S3 storage credits, 5 GB on Free, 50 GB on Pro, 1 TB on Business and 5 TB on Premium, "that offset any S3 Standard storage costs in your AWS account", and 5, 25, 50 and 75 AWS WAF rules. The allowance is not a cap:

Most importantly: you will not incur overage charges, regardless of how much you exceed your allowance.

AWS, CloudFront flat-rate pricing plans

What happens instead is spelled out (flat-rate pricing plans): "Usage allowances are not hard limits —they represent the baseline usage your plan is designed to support", "Your first traffic spike up to 3x your monthly allowance won't affect your service that month", and "Sustained usage above your allowance is evaluated over 2-3 months or more, not immediately", after which "your traffic might be served from fewer or more distant edge locations, or performance might be adjusted." Attacks do not count: "Blocked DDoS attacks and requests blocked by AWS WAF never count against your usage allowance."

The plan covers "Your CloudFront distribution", the web ACL with "custom rules, AWS Managed Rules, and request fees for the web ACL associated with your distribution", CloudWatch Logs ingestion of the access and WAF logs, and "The Route 53 hosted zone, DNS records, and DNS queries when attached to your distribution's plan"; invalidations and serverless edge compute are included too (Amazon CloudFront FAQs). Lambda@Edge, additional CloudWatch metrics and Parquet access logs stay billed. The conditions are strict:

What a CloudFront flat-rate plan requires, and what it rules out

Condition In AWS's words, or as AWS lists it
A web ACL "You must have a AWS WAF Web ACL associated with your distribution if you're using a pricing plan."
The account Not eligible when "Your account is using AWS Free Tier."
The distribution No AWS Shield Advanced, no web ACL managed by Firewall Manager
Features left out Multi-tenant and staging distributions, Anycast IP lists, real-time access logs, dedicated IP certificates, field-level encryption, origin access identity, legacy cache settings, among others
Features by tier Your own cache policies and origin request policies, and VPC origins, from Business; Origin Shield on Premium only; 5, 10, 50 and 100 cache behaviors from Free to Premium
Quotas 100 pricing plans and 3 Free plans per account, one apex domain per plan: "These quotas can't be increased for your AWS account."
Other offers "Amazon CloudFront flat-rate pricing plans may not be combined with any other offers, promotions, or discounts."

The last row is the pricing page's. Eligibility follows history: "If your recent usage exceeds a plan tier's usage allowances, you might need to select a higher tier that better aligns with your workload." Upgrades take effect at once, "Your price and usage allowance are prorated", and a cancelled plan keeps its price "through the end of your current billing cycle." AWS's own advice on the choice: "Flat-rate plans are ideal if you want combined monthly billing, simplified service configuration, and built-in security features without worrying about overage charges. Pay-as-you-go pricing is a better choice if you need complete control over individual service features, custom configurations, access to features not available in flat-rate plans, or if you expect to handle large, predictable traffic spikes."

Origin Shield, invalidations, edge compute and logs

The other CloudFront charges in the price list:

Other Amazon CloudFront charges: Origin Shield, invalidations, edge compute, logs and certificates

ItemList priceUnit
Origin Shield, per Origin Shield Region
Frankfurt (eu-central-1)$0.009per 10,000 requests
Ireland (eu-west-1)$0.009per 10,000 requests
London (eu-west-2)$0.009per 10,000 requests
Invalidations
PathsThe first 1,000 of the month, for the whole account$0.00per path
PathsBeyond 1,000$0.005per path
Edge compute
CloudFront FunctionsThe first 2 million invocations of the month$0.00per million invocations
CloudFront FunctionsBeyond 2 million$0.10per million invocations
Lambda@Edge requestsRun in Paris (eu-west-3)$0.60per million requests
Logs and certificates
Real-time access logsPer log line published$0.01per million log lines
Dedicated IP custom SSL certificateProrated by the hour$600.00per month

USD, before tax. AWS Price List, eu-west-3, eu-central-1, eu-west-1, eu-west-2 and global, offer file published October 3, 2026, fetched October 16, 2026.

Origin Shield is a request fee: "Origin Shield is charged as a request fee for each request that comes from another regional cache to your Origin Shield", and "request fees are charged based on the AWS Region you have configured to be your Origin Shield Region and not based on the Amazon CloudFront edge location serving content" (pay-as-you-go pricing); the data into Origin Shield is not billed. AWS gives the formulas (Use Amazon CloudFront Origin Shield):

How Origin Shield bills, in AWS's formulas, with two examples at the Frankfurt rate (computed)

Requests, and AWS's formula Example
Dynamic, proxied to the origin, where "Origin Shield is always an incremental layer": "Total number of dynamic requests x Origin Shield charge per 10,000 requests / 10,000" 67,108,864 requests a month, pattern 2's dynamic answers: $60.40
Cacheable: "Total number of cacheable requests x (1 – cache hit rate) x percentage of requests that go to Origin Shield from a regional edge cache in a different region x Origin Shield charge per 10,000 requests / 10,000" 104,857,600 requests at a 95% hit ratio, half of the misses from regional edge caches in other Regions: $2.36

Computed from the AWS Price List, eu-central-1, offer file published October 3, 2026, fetched October 16, 2026.

The two examples are assumptions to show the shape: the fee is small on cacheable traffic and grows with dynamic traffic, which AWS says Origin Shield may not suit. "For requests that naturally go to the regional edge cache in the same Region as Origin Shield, Origin Shield will be skipped. You don't accrue Origin Shield charges for these requests."

Invalidations are counted by path (Pay for file invalidation): "The first 1,000 invalidation paths that you submit per month are free; you pay for each invalidation path over 1,000 in a month", "A path that includes the * wildcard counts as one path even if it causes CloudFront to invalidate thousands of files", and "The maximum of 1,000 free invalidation paths per month applies to the total number of invalidation paths across all of the distributions that you create with one AWS account." Bundling does not help, "each path is still counted individually for billing purposes", and "Tag invalidation paths count toward the same 1,000 free invalidation paths per month allowance."

Logs. "CloudFront doesn't charge for enabling standard logs" (standard logging), and "For each CloudFront request, you get 750 bytes of logs delivery to CloudWatch Logs at no additional charge" (pay-as-you-go pricing); real-time access logs bill each line, and "CloudFront charges for real-time access logs, in addition to the charges you incur for using Kinesis Data Streams" (real-time access logs):

Standard logs and real-time access logs: what each bills
CloudFront's charge
None to enable them
Delivery
To Amazon S3, at the bucket's storage and request prices; to CloudWatch Logs, 750 bytes per request included
On a flat-rate plan
CloudWatch Logs ingestion of the access logs included
CloudFront's charge
$0.01 per million log lines
Delivery
To Kinesis Data Streams, billed on top
On a flat-rate plan
Not supported

What differs: a free switch and a delivery bill, against a fee per line on top of a stream.

For 100 million log lines a month, the real-time fee is $1.00, computed, before Kinesis Data Streams. The default metrics are free, and "you can turn on additional metrics for an additional cost", the cache hit rate among them, billed by CloudWatch and not priced here.

Certificates and addresses. The free tier lists free SSL certificates, and SNI is the way AWS recommends to serve them: "SNI Custom SSL is available at no additional cost beyond standard CloudFront data transfer and request fees", while "If you configure CloudFront to serve HTTPS requests using dedicated IP addresses, you incur an additional monthly charge". What each option of this line adds:

Certificates, addresses and field-level encryption: what each adds to a CloudFront bill

Feature On the bill
Custom SSL certificate, served with SNI No additional cost
Dedicated IP custom SSL certificate $600.00 per month per certificate, "pro-rated by the hour", from when it is associated with a distribution that is enabled
Anycast static IPs No number: the pricing page and the price list give different prices
Field-level encryption Per request, on top of the HTTPS fee; not priced here
SaaS Manager distribution tenants No row in the offer files read; not priced here
VPC origins Nothing: fetches through them are free

USD, before tax. AWS Price List, global, offer file published October 3, 2026, fetched October 16, 2026.

Where a certificate lives is a rule, not a cost: "To use an ACM certificate with a CloudFront distribution, make sure you request (or import) the certificate in the US East (N. Virginia) Region (us-east-1)", except for the certificate between CloudFront and a load balancer origin, where "you can request or import the certificate in any AWS Region". VPC origins save on addresses too: "VPC origins also allows you to optimize your IPv4 costs by allowing you to route to origins in a private subnet with internal IPv4 IP addresses which free of cost" (Amazon CloudFront FAQs).

The free tier, the Security Savings Bundle and custom pricing

The CloudFront FAQs give the free tier: "Starting Dec 1 2021, all AWS customers will receive 1 TB of data transfer out, 10,000,000 HTTP/HTTPS requests, plus 2,000,000 CloudFront Functions invocations each month for free." It comes back every month, it counts "across all Edge locations", and "customers that use Consolidated Billing to consolidate payment across multiple accounts will only have access to one Free Tier per Organization." At the Europe rates its data and requests are worth $99.04 a month, computed: the month of the receipt above. This article does not deduct it from any bill. It is not the Free plan: "The CloudFront Free Tier is different – it applies only to CloudFront usage under pay-as-you-go pricing."

Two discounts sit outside the Price List, so neither gets a number here, only AWS's own:

AWS says

Up to 30% lesson the CloudFront bill with the Security Savings Bundle, for a one-year commitment to a monthly amount of usage; it does not apply to flat-rate plans.

AWS · Amazon CloudFront FAQs

The CloudFront Security Savings Bundle "helps you save up to 30% on your CloudFront bill in exchange for making a commitment to a consistent amount of monthly usage", "for a 1 year term", with up to 10% of the commitment in AWS WAF usage included; it is bought "only through the CloudFront console", and "CloudFront Security Savings Bundle savings do not apply to CloudFront flat-rate pricing plans." Custom pricing is a contract: "Custom discounted pricing is available for customers willing to commit to a minimum of 10 TB of data transfer per month for 12 months or longer. Discounts vary based on the amount of the commitment", and of the bundle and custom pricing, "You may only be subscribed to one or the other."

Reading the CloudFront lines of a bill

On the bill, "On the Charges by service tab, choose CloudFront, and then expand Global or the AWS Region name"; the usage report "lists operations by region and usage type". The usage types carry the location code, EU- for Europe (Interpret your AWS bill, and the price list):

CloudFront usage types on a bill, and where the origin's lines appear

Usage type What it counts
EU-DataTransfer-Out-Bytes Data out to viewers from Europe edge locations
EU-DataTransfer-Out-OBytes Data to the origin, for DELETE, OPTIONS, PATCH, POST and PUT requests
EU-Requests-Tier1, EU-Requests-Tier2-HTTPS HTTP and HTTPS GET and HEAD requests
EU-Requests-HTTP-Proxy, EU-Requests-HTTPS-Proxy The other methods, forwarded to the origin
EUC1-Requests-OriginShield Origin Shield requests, Origin Shield in Frankfurt
Invalidations, Executions-CloudFrontFunctions, RealTimeLog-KinesisDataStream, SSL-Cert-Custom Invalidation paths, function invocations, real-time log lines, dedicated IP certificates
Global-CloudFrontPlan-Business A flat-rate plan, one usage type per plan
EUW3-CloudFront-Out-Bytes Origin fetches from Paris, under AWS data transfer, not charged

The origin's side is not under CloudFront: "This table doesn't include charges for transferring your objects from an Amazon S3 bucket to CloudFront edge locations. These charges, if any, appear in the AWS Data Transfer portion of your AWS bill." In Cost Explorer they are usage type groups such as "EC2: Data Transfer - CloudFront (Out)" and "S3: Data Transfer - CloudFront (Out)". Per distribution, the usage report has a "Resource – Either the ID of the CloudFront distribution associated with the usage or the certificate ID of an SSL certificate", and distributions take cost allocation tags, though "you can't tag origin access identities or invalidations" (Tag a CloudFront resource).

In short: A CloudFront bill is data out and requests by geographic group, plus fees that start small and grow with use: Origin Shield on dynamic traffic, invalidation paths past 1,000, Lambda@Edge, real-time logs; a flat-rate plan replaces the data, the requests, the web ACL and the hosted zone with one monthly price, under conditions.

Architecture patterns around CloudFront and what they cost

Four illustrative configurations, each priced before and after the levers of the next section, line by line from the AWS Price List: large downloads from S3, a web application of small responses behind a load balancer, a worldwide audience, and deploys that invalidate too much. Each answers one question: CloudFront or data straight out of S3, a flat-rate plan or pay-as-you-go, which price class, and the fee teams forget. None is a client case; every amount is computed, and each card lists its assumptions and what it leaves out. The EC2 patterns price the instances that sit behind such a distribution.

Pattern 1 of 4 · Illustrative configuration

Downloads from an S3 bucket in Paris

A software vendor serves 40 TB a month of installers from an S3 bucket in Paris to viewers in Europe: straight from the bucket, through CloudFront on pay-as-you-go, or through the same distribution on a flat-rate plan.

Downloads from an S3 bucket in Paris, through CloudFrontViewers in Europe download files through Amazon CloudFront. On a cache miss, CloudFront fetches the file from a private S3 bucket in the Paris Region, which only the distribution can read.Region eu-west-3 (Paris)Viewersin EuropeAmazon CloudFrontS3 bucket1234
Downloads from an S3 bucket in Paris, through CloudFront Illustrative configuration in Paris, not a client case.
  1. Each download is one HTTPS request at an edge location in Europe, $0.012 per 10,000, and its bytes are billed $0.085 per GB for the first 10 TB a month, then $0.08 for the next 40 TB.
  2. On a cache miss CloudFront fetches the file from the bucket: $0.00 per GB out of Paris to CloudFront, and the GET request at $0.00042 per 1,000.
  3. The bucket stays private, readable only by the distribution through origin access control, so no download leaves S3 straight to the internet at $0.09 per GB.
  4. On the Pro flat-rate plan, the same distribution costs $15.00 a month for an allowance of 10 million requests and 50 TB, with no overage charges.

At 256 MiB a file, the request fees are cents and the price per GB carries the bill: through CloudFront, $3,340.20 against $3,544.87 straight from the bucket, computed. The same distribution on the Pro plan costs $25.80 a month with its S3 storage credit, 99.3% less than straight from the bucket, computed, as long as it meets the plans' conditions. The chart in this card shows where pay-as-you-go stops paying off: with small objects, the request fees win.

Before · Straight from a public S3 bucket: storage $12.00, network $3,532.80, other $0.07, total $3,544.87 a month.

With the levers · Through CloudFront, bucket private, pay-as-you-go: storage $12.00, network $3,328.20, other $0.00, total $3,340.20 a month.

With the levers: $204.67 a month less (5.8% less), computed.

1 TB a month to viewers in Europe by object size: straight from S3 in Paris, or through CloudFront with 95% of requests from the cache, computed

Object sizeFrom S3, a monthThrough CloudFront, a monthChange, computed
16 KiB67,108,864 requests$120.35$168.9840.4% more
64 KiB16,777,216 requests$99.21$107.528.4% more
128 KiB8,388,608 requests$95.68$97.291.7% more
256 KiB4,194,304 requests$93.92$92.161.9% less
512 KiB2,097,152 requests$93.04$89.603.7% less
1 MiB1,048,576 requests$92.60$88.324.6% less

CloudFront costs less from about 168.0 KiB per object at a 95% hit ratio, computed: its data out costs less per GB, its requests more than S3's GET requests. The pattern's files are 256 MiB, far to the right of these sizes.

USD, before tax. AWS Price List, eu-west-3, Europe edge locations and global, offer files published September 11, 2026, September 16, 2026, October 3, 2026 and October 15, 2026, fetched October 16, 2026.

The bills line by line, the assumptions and the sources

Downloads from an S3 bucket in Paris, before: Straight from a public S3 bucket Illustrative

Viewers download from the bucket: S3 bills data out of Paris to the internet and every GET request.

LineA month
Storage
S3 Standard storage500 GB × $0.024 /GB-mo$12.00
Network$3,532.80
Data out of Paris to the internet, first 10 TB10,240 GB × $0.09 /GB$921.60
Data out of Paris to the internet, next 40 TB30,720 GB × $0.085 /GB$2,611.20
Other
S3 GET requests163,840 requests × $0.00042 /1K req$0.07
A month, computed$3,544.87

Downloads from an S3 bucket in Paris, with the levers: Through CloudFront, bucket private, pay-as-you-go Illustrative

A CloudFront distribution in front of the bucket, which only the distribution can read (origin access control); CloudFront bills its data out and its requests at its Europe edge locations' rates.

LineA month
Storage
S3 Standard storage500 GB × $0.024 /GB-mo$12.00
Network$3,328.20
CloudFront data out, Europe, first 10 TB10,240 GB × $0.085 /GB$870.40
CloudFront data out, Europe, next 40 TB30,720 GB × $0.08 /GB$2,457.60
CloudFront HTTPS requests, Europe163,840 requests × $0.012 /10K req$0.20
Data out of Paris to CloudFront, cache misses2,048 GB × $0.00 /GB$0.00
Other
S3 GET requests on cache misses8,192 requests × $0.00042 /1K req$0.00
A month, computed$3,340.20

The same distribution on the Pro flat-rate plan: $25.80 a month, 99.3% less than before, computed.

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • 40,960 GB (40 TB) a month of files of 256 MiB on average: 163,840 downloads, each one GET request; viewers in Europe only, so CloudFront bills its Europe edge locations' rates.
  • Through CloudFront, 95% of the requests are cache hits (an assumption): 8,192 requests and 2,048 GB a month reach the bucket.
  • The bucket stores 500 GB in S3 Standard in every variant.
  • The account has no other data transfer out to the internet in Paris and no other CloudFront traffic, so each tier counts this workload only.
  • On the Pro plan, the distribution stays within its monthly allowance of 10 million requests and 50 TB, and the plan's 50 GB of S3 storage credit offsets 50 GB of S3 Standard storage. The account is not on the AWS Free Tier and the distribution meets the plan's conditions.

Not counted

  • The CloudFront free tier (1 TB and 10 million requests a month) and the 100 GB a month of data out to the internet that AWS does not charge across services.
  • Download managers that split a file into ranges, which multiply the requests.
  • S3 PUT requests for the uploads, the same in every variant, and AWS KMS.
  • The AWS WAF web ACL a flat-rate plan requires, which the plan includes.

Sources

USD before tax, 730 h a month. AWS Price List, eu-west-3, Europe edge locations and global, offer files published September 11, 2026, September 16, 2026, October 3, 2026 and October 15, 2026, fetched October 16, 2026. Illustrative configuration, not a client case.

Pattern 2 of 4 · Illustrative configuration

A web application behind a load balancer: pay-as-you-go or the Business plan

A web application in Paris behind an Application Load Balancer serves 10 TB a month to viewers in Europe through CloudFront, with an AWS WAF web ACL: the same distribution on pay-as-you-go and on the Business flat-rate plan, against no CloudFront at all.

A web application behind a load balancer, on a flat-rate planViewers reach Amazon CloudFront, which caches the static files and forwards the other requests to an Application Load Balancer and its instances in a VPC in the Paris Region. The Business flat-rate plan covers the distribution, its AWS WAF web ACL and the Amazon Route 53 hosted zone.Business flat-rate planRegion eu-west-3 (Paris)VPCViewersAmazon Route 53Amazon CloudFrontAWS WAFApplicationLoad BalancerInstances123456
A web application behind a load balancer, on a flat-rate plan Illustrative configuration in Paris, not a client case.
  1. On pay-as-you-go, each request costs $0.012 per 10,000 on top of $0.085 per GB in Europe: for small pages and API answers, the request fees can cancel the lower price per GB.
  2. Two cache behaviors: /static/* cached with the managed CachingOptimized policy, every other path forwarded to the load balancer, not cached.
  3. A flat-rate plan requires an AWS WAF web ACL on the distribution, and covers it. On pay-as-you-go: $5.00 a month, $1.00 per rule and $0.60 per million requests.
  4. Attached to the plan, the hosted zone, its DNS records and its DNS queries are covered too; on pay-as-you-go the hosted zone costs $0.50 a month.
  5. The load balancer bills $0.02646 an hour and $0.0084 per capacity unit-hour; with the static files cached, it processes the misses and the dynamic pages only. Data from Paris to CloudFront: $0.00 per GB.
  6. The Business plan costs $200.00 a month for one distribution, with an allowance of 125 million requests and 50 TB, and no overage charges.

On pay-as-you-go, the requests cost $120.80 a month, two thirds of them for 32 KiB answers, and cancel CloudFront's cheaper GB: without the web ACL and the hosted zone, the setup costs $1,031.18 with its load balancer, 0.4% more than sending every viewer straight to the load balancer ($1,026.95), computed. Putting only the static files through CloudFront costs $960.89, 6.4% less than the load balancer alone. The plan changes the comparison: $239.98 with the web ACL and the hosted zone, 76.6% less than the load balancer alone, computed.

Before · CloudFront pay-as-you-go, with an AWS WAF web ACL: network $1,031.18, other $70.90, total $1,102.08 a month.

With the levers · The same distribution on the Business flat-rate plan: network $239.98, total $239.98 a month.

With the levers: $862.10 a month less (78.2% less), computed.

The bills line by line, the assumptions and the sources

A web application behind a load balancer: pay-as-you-go or the Business plan, before: CloudFront pay-as-you-go, with an AWS WAF web ACL Illustrative

CloudFront bills its data out and its requests, AWS WAF its web ACL, rules and requests, Route 53 the hosted zone.

LineA month
Network$1,031.18
CloudFront data out, Europe, first 10 TB10,240 GB × $0.085 /GB$870.40
CloudFront HTTPS requests, Europe100,663,296 requests × $0.012 /10K req$120.80
Application Load Balancer hours1 load balancer × 730 h × $0.02646 /h$19.32
Load balancer capacity units, 2,457.6 GB processed3.37 LCU × 730 h × $0.0084 /LCU-h$20.66
Data out of Paris to CloudFront2,457.6 GB × $0.00 /GB$0.00
Other$70.90
AWS WAF web ACL1 web ACL × $5.00 /mo$5.00
AWS WAF rules5 rules × $1.00 /mo$5.00
AWS WAF requests100.66 M requests × $0.60 /M req$60.40
Route 53 hosted zone1 hosted zone × $0.50 /mo$0.50
A month, computed$1,102.08

A web application behind a load balancer: pay-as-you-go or the Business plan, with the levers: The same distribution on the Business flat-rate plan Illustrative

One monthly price covers the distribution, its AWS WAF web ACL and its requests, and the hosted zone attached to the plan; the load balancer is billed as before.

LineA month
Network$239.98
CloudFront Business flat-rate plan1 plan × $200.00 /mo$200.00
Application Load Balancer hours1 load balancer × 730 h × $0.02646 /h$19.32
Load balancer capacity units, 2,457.6 GB processed3.37 LCU × 730 h × $0.0084 /LCU-h$20.66
Data out of Paris to CloudFront2,457.6 GB × $0.00 /GB$0.00
A month, computed$239.98

Same distribution, pay-as-you-go, without the web ACL and the hosted zone: $1,031.18 a month, 6.4% less than before, computed.

No CloudFront: viewers straight to the load balancer: $1,026.95 a month, 6.8% less than before, computed.

Static files through CloudFront, the rest straight to the load balancer: $960.89 a month, 12.8% less than before, computed.

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • Each month, 8,192 GB of static files of 256 KiB on average (33,554,432 requests) and 2,048 GB of dynamic pages and API answers of 32 KiB (67,108,864 requests): 100,663,296 requests and 10,240 GB in all, viewers in Europe. The dynamic requests are GET requests, so no data goes to the origin.
  • Two cache behaviors: /static/* cached with the managed CachingOptimized policy, 95% of its requests cache hits (an assumption); every other path not cached (CachingDisabled). The load balancer processes the misses and the dynamic answers, 2,457.6 GB a month.
  • Processed bytes are the load balancer's highest LCU dimension (an assumption: about 38 requests a second on average keep the other dimensions below it): 1 GB per LCU-hour, so 2,457.6 GB over 730 hours is 3.37 LCUs on average, rounded to the hundredth.
  • An AWS WAF web ACL with 5 rules or managed rule groups protects the distribution (at most 1,500 WCUs, the default body inspection), and the domain's hosted zone is in Route 53 with an ALIAS record to the distribution. A flat-rate plan requires the web ACL and covers it, and covers the hosted zone attached to the plan.
  • On the Business plan, the distribution stays within its monthly allowance of 125 million requests and 50 TB, and meets the plan's conditions.
  • The account has no other data transfer out to the internet in Paris and no other CloudFront traffic.

Not counted

  • The instances behind the load balancer, the same in every variant: the cache lowers their load, which has no list price.
  • AWS WAF logs, Bot Control and the other paid AWS WAF features; Lambda@Edge.
  • The CloudFront free tier and the 100 GB a month of data out that AWS does not charge across services.
  • Data sent to the origin by POST and PUT requests (billed per GB from Europe's edge locations).

Sources

USD before tax, 730 h a month. AWS Price List, eu-west-3, Europe edge locations and global, offer files published September 11, 2026, September 14, 2026, September 16, 2026 and October 3, 2026, fetched October 16, 2026. Illustrative configuration, not a client case.

Pattern 3 of 4 · Illustrative configuration

A global audience: Price Class All or Price Class 100

A media library in an S3 bucket in Paris is served worldwide through CloudFront, 100 TB a month: every edge location with Price Class All, the least expensive ones with Price Class 100.

A global audience on Price Class 100Viewers in Europe and North America are served by the nearest edge locations. With Price Class 100, viewers elsewhere are served by the same edge locations of Europe and North America. Every edge location fetches from an S3 bucket in the Paris Region.Price Class 100Region eu-west-3 (Paris)Viewers inEuropeViewers inN. AmericaViewerselsewhereEdge locations,EuropeEdge locations,N. AmericaS3 bucket1234
A global audience on Price Class 100 Illustrative configuration in Paris, not a client case.
  1. With Price Class All, the default, each viewer is served by the nearest edge location and billed at its group's rates: $0.114 per GB in Japan, $0.12 in Asia Pacific, $0.11 in South America, against $0.085 in Europe.
  2. Price Class 100 keeps the edge locations of North America and of Europe, Israel and Türkiye, the least expensive groups.
  3. Viewers elsewhere are then served by edge locations in the class (dashed), billed at those locations' rates, and, AWS warns, may see higher latency.
  4. The origin's side does not change: data out of Paris to CloudFront is $0.00 per GB.

Billed at the United States rates instead of Europe's, the viewers outside the class bring Price Class 100 to $8,306.29, 12.3% less than Price Class All; Price Class 200 costs $9,037.58, 4.6% less, computed. The Premium plan at its 125 TB level, at $2,250.00, is one price wherever the viewers are, and needs no price class at all.

Before · Price Class All: network $9,470.05, total $9,470.05 a month.

With the levers · Price Class 100: network $7,902.98, total $7,902.98 a month.

With the levers: $1,567.07 a month less (16.5% less), computed.

The bills line by line, the assumptions and the sources

A global audience: Price Class All or Price Class 100, before: Price Class All Illustrative

Every edge location serves its own viewers, at its group's rates.

LineA month
Network$9,470.05
CloudFront data out, Europe, first 10 TB10,240 GB × $0.085 /GB$870.40
CloudFront data out, Europe, next 40 TB35,840 GB × $0.08 /GB$2,867.20
CloudFront HTTPS requests, Europe47,185,920 requests × $0.012 /10K req$56.62
CloudFront data out, United States, first 10 TB10,240 GB × $0.085 /GB$870.40
CloudFront data out, United States, next 40 TB15,360 GB × $0.08 /GB$1,228.80
CloudFront HTTPS requests, United States26,214,400 requests × $0.01 /10K req$26.21
CloudFront data out, Japan, first 10 TB8,192 GB × $0.114 /GB$933.89
CloudFront HTTPS requests, Japan8,388,608 requests × $0.012 /10K req$10.07
CloudFront data out, Asia Pacific, first 10 TB8,192 GB × $0.12 /GB$983.04
CloudFront HTTPS requests, Asia Pacific8,388,608 requests × $0.012 /10K req$10.07
CloudFront data out, South America, first 10 TB6,144 GB × $0.11 /GB$675.84
CloudFront HTTPS requests, South America6,291,456 requests × $0.022 /10K req$13.84
CloudFront data out, Australia, first 10 TB4,096 GB × $0.114 /GB$466.94
CloudFront HTTPS requests, Australia4,194,304 requests × $0.0125 /10K req$5.24
CloudFront data out, India, first 10 TB4,096 GB × $0.109 /GB$446.46
CloudFront HTTPS requests, India4,194,304 requests × $0.012 /10K req$5.03
A month, computed$9,470.05

A global audience: Price Class All or Price Class 100, with the levers: Price Class 100 Illustrative

Only the edge locations of North America and of Europe, Israel and Türkiye serve the distribution; the viewers elsewhere are billed at the Europe rates.

LineA month
Network$7,902.98
CloudFront data out, Europe, first 10 TB10,240 GB × $0.085 /GB$870.40
CloudFront data out, Europe, next 40 TB40,960 GB × $0.08 /GB$3,276.80
CloudFront data out, Europe, next 100 TB25,600 GB × $0.06 /GB$1,536.00
CloudFront HTTPS requests, Europe78,643,200 requests × $0.012 /10K req$94.37
CloudFront data out, United States, first 10 TB10,240 GB × $0.085 /GB$870.40
CloudFront data out, United States, next 40 TB15,360 GB × $0.08 /GB$1,228.80
CloudFront HTTPS requests, United States26,214,400 requests × $0.01 /10K req$26.21
A month, computed$7,902.98

Price Class 100, viewers outside billed at United States rates: $8,306.29 a month, 12.3% less than before, computed.

Price Class 200: $9,037.58 a month, 4.6% less than before, computed.

Premium flat-rate plan at the 125 TB level: $2,250.00 a month, 76.2% less than before, computed.

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • 102,400 GB (100 TB) a month of 1 MiB objects: 104,857,600 requests, one per object. Viewers: Europe 45%, United States 25%, Japan 8%, Asia Pacific 8%, South America 6%, Australia 4%, India 4% (an assumed mix).
  • With Price Class All, each viewer is served by an edge location of its own geographic group, billed at that group's rates; each group's tiers count its own GB.
  • With Price Class 100, the viewers outside North America and Europe (30% of the traffic) are served by edge locations in the class, and the bill prices them at the Europe rates: an assumption, since which edge location of the class serves them is AWS's routing. One alternative prices them at the United States rates instead.
  • With Price Class 200, only South America and Australia (10%) move, priced at the Europe rates under the same assumption.
  • On the Premium plan at its 125 TB level, the distribution stays within its monthly allowance of 1.25 billion requests and 125 TB, and meets the plan's conditions.

Not counted

  • Latency, which AWS warns can rise for viewers outside the price class.
  • The origin's side, the same in every variant: S3 storage and GET requests (data from S3 to CloudFront is not billed).
  • The CloudFront free tier.

Sources

USD before tax, 730 h a month. AWS Price List, Europe, United States, Japan, Asia Pacific, South America, Australia and India edge locations, and global, offer files published September 11, 2026 and October 3, 2026, fetched October 16, 2026. Illustrative configuration, not a client case.

Pattern 4 of 4 · Illustrative configuration

Deploys that invalidate every changed file

A single-page application on S3 and CloudFront is deployed every working day, and its pipeline invalidates each file a deploy changes: one invalidation path per changed file, or versioned file names and one path per deploy.

Deploys with versioned file namesA deploy pipeline uploads files with versioned names to an S3 bucket in the Paris Region, served by Amazon CloudFront. Only the page that points to the new names is invalidated.Region eu-west-3 (Paris)Invalidate /index.htmlDeploypipelineS3 bucketAmazon CloudFrontViewers123
Deploys with versioned file names Illustrative configuration in Paris, not a client case.
  1. Each build uploads its files under new names that carry a version, such as app.3f9c2b.js, and an index.html that points to them.
  2. CloudFront fetches each new name from the bucket on its first request; the old names stay in the caches until they expire or are evicted, and no page links to them any more.
  3. Only index.html is invalidated: one path per deploy. The first 1,000 paths a month are free for the whole account, then $0.005 per path; a path with a * wildcard counts as one.

The 44,000 paths a month cost $215.00 beyond the account's first 1,000, computed; with versioned file names the same deploys stay within the free paths. A team that invalidates /* instead pays for one path per deploy but empties the caches every time, and the origin serves every file again.

Before · One invalidation path per changed file: network $111.04, other $215.00, total $326.04 a month.

With the levers · Versioned file names, one path per deploy: network $111.04, other $0.00, total $111.04 a month.

With the levers: $215.00 a month less (65.9% less), computed.

The bills line by line, the assumptions and the sources

Deploys that invalidate every changed file, before: One invalidation path per changed file Illustrative

The pipeline invalidates each changed path: 44,000 paths a month.

LineA month
Network$111.04
CloudFront data out, Europe, first 10 TB1,024 GB × $0.085 /GB$87.04
CloudFront HTTPS requests, Europe20,000,000 requests × $0.012 /10K req$24.00
Other$215.00
Invalidation paths, the first 1,0001,000 paths × $0.00 /path$0.00
Invalidation paths beyond 1,00043,000 paths × $0.005 /path$215.00
A month, computed$326.04

Deploys that invalidate every changed file, with the levers: Versioned file names, one path per deploy Illustrative

The build writes new file names, such as app.3f9c2b.js, and the pipeline invalidates /index.html only.

LineA month
Network$111.04
CloudFront data out, Europe, first 10 TB1,024 GB × $0.085 /GB$87.04
CloudFront HTTPS requests, Europe20,000,000 requests × $0.012 /10K req$24.00
Other
Invalidation paths, within the first 1,00022 paths × $0.00 /path$0.00
A month, computed$111.04

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • Viewers in Europe: 1,024 GB (1 TB) and 20,000,000 requests a month, the same in both variants.
  • 22 deploys a month, one a working day, each changing 2,000 files: 44,000 invalidation paths a month when each changed file is invalidated, 22 when only /index.html is.
  • The account has no other distribution, so the first 1,000 paths of the month, free for the whole account, are this pipeline's. No query-string variants and no URI rewrites multiply the paths.
  • The new file names are fetched from the bucket once per cache, as invalidated files would be: the other lines do not change.

Not counted

  • The CloudFront free tier.
  • The S3 storage, PUT requests and origin fetches of the deploys, the same in both variants.
  • A flat-rate plan, which includes invalidations.

Sources

USD before tax, 730 h a month. AWS Price List, Europe edge locations and global, offer file published October 3, 2026, fetched October 16, 2026. Illustrative configuration, not a client case.

Want the same levers on your own bill?

Get a free audit

How to reduce CloudFront costs

Each lever below comes from AWS documentation; their order is this article's. The Well-Architected Framework's data transfer practices point to CloudFront itself, "use edge locations or content delivery networks (CDN) to deliver content to end users" (COST08-BP03), and the levers then shape what it bills: see the bill first, trim the fees nothing needs, reshape what reaches the origin and the edge, route the traffic to the cheaper path, and only then commit, to a plan or a spend. The levers, in that order:

  1. Lever 01,SeeSee the CloudFront bill by location, usage type and distributionAlways, and first
  2. Lever 02,TrimVersion file names instead of invalidating themDeploys that invalidate many paths a month
  3. Lever 03,TrimPay only for the logs and features you useReal-time logs, dedicated IP certificates
  4. Lever 04,TrimCompress at the edgeText files: HTML, CSS, JavaScript, JSON
  5. Lever 05,ReshapeRaise the cache hit ratio with a lean cache key and long TTLsAn origin that bills or struggles at peaks
  6. Lever 06,ReshapeWeigh request fees against the cheaper GBMany small responses on pay-as-you-go
  7. Lever 07,ReshapeRun light edge code in CloudFront FunctionsCode that runs on every request
  8. Lever 08,RouteKeep the origin private, so every byte goes through CloudFrontAn origin that is also public
  9. Lever 09,RouteChoose the price class by where the viewers areViewers in the expensive groups
  10. Lever 10,RouteUse Origin Shield where the origin is costly to reachViewers in several regions, costly origins
  11. Lever 11,CommitPut a distribution on a flat-rate plan when it fitsOne distribution within a plan's allowance
  12. Lever 12,CommitCommit on spend for steady pay-as-you-go trafficSteady pay-as-you-go use, once the rest is done
  13. Lever 13,ReviewReview on a cadenceEvery distribution

Lever 01 · See

See the CloudFront bill by location, usage type and distribution

When it applies
Always, and first: before a price class, a plan or a cache policy is changed, read where the bytes and the requests are billed, and how many reach the origin.
Watch out
The origin's side of the bill is under other services; cost allocation tags must be activated; cache statistics can be a day late, and the cache hit rate metric is an additional, paid metric.
Tools
Cost ExplorerAWS usage reportCloudFront cache statisticsStandard logs

Three cuts make a CloudFront bill readable: by usage type and location code, where the CloudFront lines separate data out, requests and the other fees of each geographic group; by distribution, with the usage report's resource column or cost allocation tags, for which "you must first activate tags for cost allocation in the Billing and Cost Management console"; and by what reaches the origin, with the cache statistics:

What each tool shows of a CloudFront bill

Tool What it shows
Cost Explorer The CloudFront usage types, and the origin's data to CloudFront under each origin's service
AWS usage report Operations by Region and usage type, and the distribution behind each line
CloudFront cache statistics "Hits, misses, and errors as a percentage of total viewer requests", and the bytes from misses
Standard logs Each request, with its query string and cookies, free to enable

The cache statistics report also gives "Bytes transferred to viewers – Total bytes and bytes from misses": the bytes from misses are what the origin served. Its data "can occasionally be delayed by as much as 24 hours". The Well-Architected Framework's advice applies as written: "Analyze your network usage: Use metering and reporting tools such as AWS Cost Explorer, CUDOS Dashboards, or CloudWatch to understand data transfer cost of your workload" (COST08-BP02).

Lever 02 · Trim

Version file names instead of invalidating them

When it applies
Deploys that invalidate more than the account's 1,000 free paths a month, one path per changed file.
Watch out
The 1,000 free paths are shared by every distribution of the account; query strings, and a Lambda@Edge function that rewrites the URI on viewer requests, multiply the paths; a wildcard counts as one path but empties every file it matches from the caches.
Tools
File versioningCache-Control max-age

AWS's rule (Invalidate files to remove content): "If you want to update your files frequently, we recommend that you primarily use file versioning", because "Versioning is less expensive. You still have to pay for CloudFront to transfer new versions of your files to edge locations, but you don't have to pay for invalidating files." A build that writes new names, such as app.3f9c2b.js, only needs the page that points to them invalidated. In pattern 4:

44,000 invalidation paths a month

$215.00 a monthfor the paths beyond the account's first 1,000 free ones, computed: versioned file names bring them down to one path per deploy.

Computed from the AWS Price List · global · Oct 3, 2026

Versioning does not replace a time to live: "Even if you version your files, we still recommend that you set an expiration date". Two things multiply paths without anyone noticing (What you need to know when invalidating paths): query strings, since "If client requests include five different query strings for the same file, you can either invalidate the file five times, once for each query string, or you can use the * wildcard in the invalidation path", and a Lambda@Edge function on viewer request events that changes the URI, where "we recommend that you invalidate both URIs". The FAQ puts it plainly: "You should use invalidation only in unexpected circumstances". Flat-rate plans include invalidations.

Lever 03 · Trim

Pay only for the logs and features you use

When it applies
Distributions with real-time access logs at a 100% sampling rate, a dedicated IP custom SSL certificate, or field-level encryption on every request.
Watch out
Real-time logs bill per line on top of Kinesis Data Streams; a dedicated IP certificate bills every month it stays associated with a distribution; SNI is the way AWS recommends.
Tools
Standard logsSampling rateSNI

Three features bill whether or not anyone reads what they produce. Real-time access logs bill each line, $0.01 per million log lines on top of Kinesis Data Streams, while standard logs are free to enable; where real-time logs are needed, "You might choose a lower sampling rate to reduce costs while still receiving a representative sample of request data in your real-time access logs". A dedicated IP certificate bills for every hour it is associated with an enabled distribution, and over a year that adds up:

One dedicated IP custom SSL certificate, all year

$7,200.00 a yearassociated with one or more enabled distributions for twelve months, computed, where SNI, the way AWS recommends, has no additional cost.

Computed from the AWS Price List · global · Oct 3, 2026

Field-level encryption is billed per request on top of the HTTPS fee (pay-as-you-go pricing), so keep it to the requests that carry the fields it protects; and turn on additional metrics only where someone watches them.

Lever 04 · Trim

Compress at the edge

When it applies
Text files of 1,000 to 10,000,000 bytes, served to viewers that accept Gzip or Brotli.
Watch out
Files already cached stay uncompressed until they expire or are invalidated; the origin must send Content-Length; Brotli needs a cache policy, and Chrome and Firefox use it over HTTPS only.
Tools
Compress objects automaticallyCache policy

"Serving compressed objects can be less expensive than serving them uncompressed", and compressed text can be, "in some cases, less than a quarter the size of the original" (Serve compressed files). Turn on "Compress objects automatically" in the cache behavior and allow Gzip and Brotli in the cache policy; "When the viewer supports both Gzip and Brotli, CloudFront uses Brotli", and "CloudFront compresses objects that are between 1,000 bytes and 10,000,000 bytes in size." As an upper bound, not a measure: 1 TB of text a month from Europe costs $87.04, and a quarter of it $21.76, computed:

1 TB of text a month, at a quarter of its size

$65.28 a monthsaved on CloudFront's data out from Europe if every file shrank to a quarter, AWS's 'in some cases' figure: an upper bound, not a measure.

Computed from the AWS Price List · Europe edge locations · Oct 3, 2026

The guide's cautions: objects already cached are not compressed until they expire or are invalidated, the origin must send a Content-Length header, HTTP 1.0 requests get no compression, and Chrome and Firefox support Brotli over HTTPS only.

Lever 05 · Reshape

Raise the cache hit ratio with a lean cache key and long TTLs

When it applies
Origins whose own bill is large (compute, load balancer capacity, data out of a non-AWS origin), or that struggle at peaks.
Watch out
On CloudFront's own bill, a higher hit ratio lowers only the Origin Shield fee and Lambda@Edge on origin events; a value the response depends on must stay in the cache key; legacy cache settings forward headers by default; on a flat-rate plan, your own cache and origin request policies need Business or Premium.
Tools
Managed cache policiesOrigin request policiesCache statistics

Keep in the cache key only what changes the response, and give everything else to an origin request policy: "Including fewer values in the cache key increases the likelihood of a cache hit" (Control the cache key with a policy). Use CachingOptimized for static paths, separate cache behaviors for static and dynamic paths, and "the longest practical value for max-age". The standard logs' query string and cookie columns show which values split the cache (cache hit ratio).

The saving lands on the origin's bill, not on CloudFront's data out and requests, and how much depends on the origin:

What each cache hit saves, by origin

Origin Saved on each hit
S3 bucket in Paris A GET request, $0.00042 per 1,000 requests; the data to CloudFront is free either way
Application Load Balancer and its instances One LCU-hour of capacity, $0.0084, per GB it no longer processes, when processed bytes are its highest dimension, and the instances' work
An origin outside AWS Its provider's data out and its work, at its own prices
Any origin, on CloudFront's own bill The Origin Shield fee and any Lambda@Edge function on origin events, where configured; the viewer's request and bytes are billed either way

USD, before tax. AWS Price List, eu-west-3, offer files published September 11, 2026 and October 15, 2026, fetched October 16, 2026.

In pattern 2, with the static files cached, the load balancer processes 2,457.6 GB a month instead of 10,240 GB: $20.66 of capacity units instead of $86.03, computed, and the instances behind it serve a fraction of the requests, which has no list price. S3 GET requests are cheap enough that the hit ratio barely moves an S3 origin's own bill; compute and load balancers are where it shows. One caution: a value that the response depends on must stay in the key, whatever it costs; the legacy cache settings forward headers by default.

Lever 06 · Reshape

Weigh request fees against the cheaper GB

When it applies
Pay-as-you-go distributions with many small responses: APIs, small images, beacons.
Watch out
Performance and security are AWS's reasons to put dynamic traffic through CloudFront too; a flat-rate plan has no request fee within its allowance; a 304 response is a billed request.
Tools
Cache statisticsCache behaviors

On pay-as-you-go, each kind of traffic has its break-even object size (CloudFront, or data straight out of the origin): files above about 168.0 KiB from S3 cost less through CloudFront at a 95% hit ratio, small dynamic answers can cost more. Pattern 2's 10 TB, served four ways:

Pattern 2's web application, served four ways, a month (computed)

Way to serve it A month, computed Against the load balancer alone, computed
Viewers straight to the load balancer $1,026.95 —
Everything through CloudFront, pay-as-you-go $1,031.18 0.4% more
Static files through CloudFront, the rest straight $960.89 6.4% less
Everything on the Business plan, web ACL included $239.98 76.6% less

Computed from the AWS Price List, eu-west-3, Europe edge locations and global, offer files published September 11, 2026, September 16, 2026 and October 3, 2026, fetched October 16, 2026.

That is a reason to measure, not to pull dynamic traffic out of CloudFront: AWS counts performance and security among its reasons to put it there, a flat-rate plan has no request fee within its allowance, and a 304 is a billed request too.

Lever 07 · Reshape

Run light edge code in CloudFront Functions

When it applies
Header changes, redirects, URL rewrites, cache key normalization and token checks that run on every viewer request.
Watch out
CloudFront Functions run JavaScript in under a millisecond with 2 MB of memory, on viewer events only, without network access; Lambda@Edge has no free tier and flat-rate plans do not include it.
Tools
CloudFront FunctionsLambda@Edge

Header changes, redirects, URL rewrites, cache key normalization and token checks are CloudFront Functions' work; Lambda@Edge is for "Functions that take several milliseconds or more to complete" or "Functions that require network access to use external services for processing" (Differences between CloudFront Functions and Lambda@Edge). On code that runs on every request the difference is large:

Lambda@Edge requests, 100 million a month

$60.00 a monthfor 100 million invocations run in Paris, before any duration: $0.63 more at 1 ms with 128 MB, computed.

Computed from the AWS Price List · eu-west-3 · Oct 3, 2026

The same 100 million invocations cost $10.00 on CloudFront Functions, computed. Their limits are the price of that: JavaScript, submillisecond, 2 MB of memory, viewer events only. And a flat-rate plan includes CloudFront Functions but bills Lambda@Edge on top.

Lever 08 · Route

Keep the origin private, so every byte goes through CloudFront

When it applies
An S3 bucket, a load balancer or instances that viewers can also reach without CloudFront, at the Region's data out rates and without the cache.
Watch out
Origin access identity is legacy and not supported on flat-rate plans; a bucket used as a website endpoint is a custom origin, without origin access control; on a flat-rate plan, VPC origins need Business or Premium.
Tools
Origin access controlVPC originsManaged prefix list

An origin that viewers can also reach directly bills its data out at the Region's rate, $0.09 per GB for the first 10 TB in Paris, and without the cache. AWS's advice, from the plans' page: "To maximize these savings, configure your AWS origins to only accept traffic from CloudFront". There are three ways, by origin:

Three ways to keep an origin reachable from CloudFront only

Origin Way
S3 bucket Origin access control (Restrict access to an Amazon S3 origin)
Load balancer or instances in private subnets VPC origins, whose origin fetches are free too
Any origin behind a security group The CloudFront managed prefix list, which "contains the IP address ranges of all of the CloudFront globally distributed origin-facing servers" (Locations and IP address ranges of CloudFront edge servers)

One case does not fit: "If your origin is an Amazon S3 bucket configured as a website endpoint, you must set it up with CloudFront as a custom origin. That means you can't use OAC (or OAI)." Origin access identity is the legacy way, and flat-rate plans do not support it. Pattern 1 prices the private bucket.

Lever 09 · Route

Choose the price class by where the viewers are

When it applies
Distributions with a meaningful share of viewers outside North America and Europe, where those viewers can accept a higher latency.
Watch out
Viewers outside the class may see higher latency; they are billed at the rates of the edge location that serves them; Anycast static IPs need Price Class All; flat-rate plans have one price wherever the viewers are.
Tools
Distribution settingsUsage report by location

A smaller price class serves the viewers outside it from the edge locations inside it, at those locations' rates, and the gap it closes can be wide:

South America against Europe, per GB

29.4% morefor the first 10 TB a month: what a viewer served in South America costs with Price Class All, before Price Class 200 or 100 serves it from edge locations of the class instead.

Computed from the AWS Price List · Europe edge locations and South America edge locations · Oct 3, 2026

In pattern 3, with 30% of the traffic outside North America and Europe, Price Class 100 costs less than Price Class All under either assumption on where those viewers are billed, and Price Class 200 a little less. AWS's warning is the trade: viewers outside the class "may experience higher latency than if your content were being served from all Amazon CloudFront locations" (pay-as-you-go pricing). Check the audience first: the usage report by location code shows which groups carry the bytes, and a distribution whose viewers are all in Europe or North America saves nothing with Price Class 100. Anycast static IPs need Price Class All, and a flat-rate plan has one price wherever the viewers are.

Lever 10 · Route

Use Origin Shield where the origin is costly to reach

When it applies
Viewers spread over several geographic regions, origins that package or transform on the fly, on-premises or multi-CDN origins, origins that bill their data out.
Watch out
Every dynamic request pays the Origin Shield fee; AWS says it may not fit dynamic, low-cacheability or rarely requested content; the price list has no Paris row; on a flat-rate plan, Premium only.
Tools
Origin ShieldCache statistics

Enable Origin Shield on an origin, in the Region closest to it, where AWS lists its use: "Viewers that are spread across different geographical regions", "Origins that provide just-in-time packaging for live streaming or on-the-fly image processing", "On-premises origins with capacity or bandwidth constraints", "Workloads that use multiple content delivery networks (CDNs)" (Use Amazon CloudFront Origin Shield). Its fee falls on every dynamic request:

Origin Shield on pattern 2's dynamic answers

$60.40 a month67,108,864 requests a month at the Frankfurt rate, computed: an incremental layer, in AWS's words, for dynamic requests proxied to the origin.

Computed from the AWS Price List · eu-central-1 · Oct 3, 2026

AWS gives no hit ratio above or below which it pays: it gives the formulas, and the examples show the other end too, $2.36 a month on 104,857,600 cacheable requests, computed. Its saving is on the origin's side, fewer requests to serve and less data out of an origin outside AWS, which depends on the origin and is not priced here. For an origin in Paris, the guide says to choose Paris, which the price list does not price.

Lever 11 · Commit

Put a distribution on a flat-rate plan when it fits

When it applies
A distribution with one apex domain, within a plan's allowance of requests and data, using no feature the plans leave out and none its tier lacks, in an account that is not on the AWS Free Tier.
Watch out
A plan needs an AWS WAF web ACL (covered); Lambda@Edge and extra metrics stay billed; sustained use above the allowance can change delivery; downgrades wait for the next billing cycle; no Savings Bundle on a plan; some features depend on the tier: your own cache and origin request policies and VPC origins from Business, Origin Shield on Premium only, 5 to 100 cache behaviors.
Tools
CloudFront pricing plansUsage notifications

Where a distribution fits a plan's allowance and its conditions, the plan replaces the data, the requests, the web ACL and the hosted zone with one price:

A flat-rate plan or pay-as-you-go, for one distribution
Price
One monthly price per distribution, by tier
Beyond the allowance
No overage charges; sustained excess can change delivery
Included
The AWS WAF web ACL, an attached Route 53 hosted zone, invalidations, CloudFront Functions
AWS's view
Combined monthly billing, simplified configuration, built-in security
Price
Per GB and per request, by geographic group
Beyond the allowance
No allowance: every GB and request is billed
Included
Nothing: each feature on its own line
AWS's view
Complete control, custom configurations, the features plans leave out, large predictable spikes

What differs: a fixed monthly price with an allowance and conditions, against a price per unit with every feature.

In the patterns: $25.80 a month instead of $3,340.20 for 40 TB of downloads, $239.98 instead of $1,102.08 for the web application with its web ACL, and $2,250.00 for a worldwide 100 TB, 76.2% less than Price Class All, computed. Before choosing, check the conditions: one distribution and one apex domain per plan, a web ACL, no feature the plans leave out, a tier that has the features the distribution uses, an account not on the AWS Free Tier, no AWS Shield Advanced on the distribution, and no Security Savings Bundle or custom pricing you would rather keep. Pick the tier on the allowance the distribution needs, not on the 3x a first spike may reach: "Sustained usage above your allowance is evaluated over 2-3 months or more", and delivery may then change. The plans send notifications as usage reaches 50%, 80% and 100% of the allowance.

Lever 12 · Commit

Commit on spend for steady pay-as-you-go traffic

When it applies
Steady pay-as-you-go usage that no flat-rate plan fits, once the other levers have shrunk it.
Watch out
A one-year commitment; not combined with flat-rate plans; the Savings Bundle or custom pricing, not both; bought in the CloudFront console only.
Tools
CloudFront Security Savings Bundle

For pay-as-you-go traffic that no plan fits, two commitments exist, neither in the Price List. The Well-Architected Framework names the first: "The security savings bundle can help you to save up to 30% on your CloudFront usage if you plan to grow your usage over time". Both, as the pricing section quotes them:

Two commitments for pay-as-you-go CloudFront traffic, neither in the Price List

Commitment Its terms, as AWS gives them
CloudFront Security Savings Bundle Up to 30% saved for a one-year commitment to a monthly amount of usage; bought in the CloudFront console only
Custom pricing A minimum of 10 TB of data transfer a month for 12 months or longer; discounts vary with the commitment

One or the other, never with a flat-rate plan; and like any commitment, it comes after the levers that shrink the usage it covers.

Lever 13 · Review

Review on a cadence

When it applies
Every distribution: the largest every three to six months, the others once a year.
Watch out
A plan's eligibility follows recent usage, and the audience's geography moves a price class's sums.

"The review effort should reflect potential benefit", and the Well-Architected Framework gives the cadence:

How often to review a workload, by its share of the bill (COST10-BP01)

Workload Review
Core workloads, or over ten percent of the bill "quarterly or every six months"
Below ten percent of the bill "annually"

CloudFront gives its own reasons to look again: a plan's allowance and eligibility follow recent usage, and the audience's geography moves a price class's sums.

In short: See where CloudFront bills and what reaches the origin, trim the fees nothing needs, shape the cache key and the edge code, keep the origin private and the price class honest, and only then commit, to a flat-rate plan where a distribution fits one, or to a spend.

FAQ

How is CloudFront billed?

On pay-as-you-go, per GB of data out and per request, at the rates of the geographic group of the edge location that serves each viewer, plus fees for Origin Shield, invalidations past 1,000 paths, edge compute and logs; fetches from an AWS origin are free. A flat-rate plan replaces the data, the requests, the web ACL and an attached hosted zone with one monthly price per distribution (What a CloudFront bill is made of).

What are CloudFront's flat-rate pricing plans, and how do they compare with pay-as-you-go?

Monthly plans per distribution, from Free to Premium, each with an allowance of requests and data, AWS WAF and Route 53 included, and no overage charges. Where a distribution fits one, they cost far less than pay-as-you-go in this article's patterns; they require a web ACL, do not support features such as real-time logs, and bill Lambda@Edge on top (Flat-rate plans).

Which price class should I pick?

The one that matches where the viewers are. Price Class 100 keeps North America and Europe; 200 adds Japan, Asia Pacific, India, and the Middle East, South Africa, Kenya, Nigeria and Egypt; All adds South America, Australia and New Zealand. A smaller class saves only on viewers outside it, who may see more latency (Price classes).

Does CloudFront reduce S3 costs?

For large objects, yes: data from S3 to CloudFront is free and CloudFront's data out costs less per GB. For small objects on pay-as-you-go, the request fees can cost more than the GB saves: the break-even is about 168.0 KiB at a 95% hit ratio (CloudFront, or data straight out of the origin, and the S3 article's answer).

CloudFront Functions or Lambda@Edge?

CloudFront Functions for light work on every request, header changes, redirects, rewrites, token checks; Lambda@Edge for functions that run longer, call other services or read the body. Lambda@Edge costs more per request, bills its duration and has no free tier (CloudFront Functions and Lambda@Edge).

Sources

  1. What is Amazon CloudFront? AWS, documentation, accessed October 16, 2026.
  2. Ways to use CloudFront AWS, documentation, accessed October 16, 2026.
  3. How CloudFront delivers content AWS, documentation, accessed October 16, 2026.
  4. Locations and IP address ranges of CloudFront edge servers AWS, documentation, accessed October 16, 2026.
  5. CloudFront flat-rate pricing plans AWS, documentation, accessed October 16, 2026.
  6. Distribution settings AWS, documentation, accessed October 16, 2026.
  7. Caching and availability AWS, documentation, accessed October 16, 2026.
  8. Increase the proportion of requests that are served directly from the CloudFront caches (cache hit ratio) AWS, documentation, accessed October 16, 2026.
  9. Use Amazon CloudFront Origin Shield AWS, documentation, accessed October 16, 2026.
  10. Manage how long content stays in the cache (expiration) AWS, documentation, accessed October 16, 2026.
  11. Control the cache key with a policy AWS, documentation, accessed October 16, 2026.
  12. Understand the cache key AWS, documentation, accessed October 16, 2026.
  13. Use managed cache policies AWS, documentation, accessed October 16, 2026.
  14. Control origin requests with a policy AWS, documentation, accessed October 16, 2026.
  15. Invalidate files to remove content AWS, documentation, accessed October 16, 2026.
  16. Pay for file invalidation AWS, documentation, accessed October 16, 2026.
  17. What you need to know when invalidating paths AWS, documentation, accessed October 16, 2026.
  18. Use file versioning to update or remove content with a CloudFront distribution AWS, documentation, accessed October 16, 2026.
  19. Serve compressed files AWS, documentation, accessed October 16, 2026.
  20. AWS billing and usage reports for CloudFront AWS, documentation, accessed October 16, 2026.
  21. Interpret your AWS bill and usage reports for CloudFront AWS, documentation, accessed October 16, 2026.
  22. View CloudFront cache statistics reports AWS, documentation, accessed October 16, 2026.
  23. Tag a CloudFront resource AWS, documentation, accessed October 16, 2026.
  24. Configure standard logging (v2) AWS, documentation, accessed October 16, 2026.
  25. Use real-time access logs AWS, documentation, accessed October 16, 2026.
  26. Differences between CloudFront Functions and Lambda@Edge AWS, documentation, accessed October 16, 2026.
  27. Customize at the edge with Lambda@Edge AWS, documentation, accessed October 16, 2026.
  28. CloudFront events that can trigger a Lambda@Edge function AWS, documentation, accessed October 16, 2026.
  29. Restrict access to an Amazon S3 origin AWS, documentation, accessed October 16, 2026.
  30. Restrict access with VPC origins AWS, documentation, accessed October 16, 2026.
  31. Choose how CloudFront serves HTTPS requests AWS, documentation, accessed October 16, 2026.
  32. Request Anycast static IPs to use for allowlisting AWS, documentation, accessed October 16, 2026.
  33. View CloudFront and edge function metrics AWS, documentation, accessed October 16, 2026.
  34. Use various origins with CloudFront distributions AWS, documentation, accessed October 16, 2026.
  35. Requirements for using SSL/TLS certificates with CloudFront AWS, documentation, accessed October 16, 2026.
  36. Amazon CloudFront pricing AWS, pricing page, accessed October 16, 2026.
  37. Amazon CloudFront pay-as-you-go pricing AWS, pricing page, accessed October 16, 2026.
  38. Amazon CloudFront FAQs AWS, product page, accessed October 16, 2026.
  39. Amazon CloudFront features AWS, product page, accessed October 16, 2026.
  40. Amazon S3 pricing AWS, pricing page, accessed October 16, 2026.
  41. Amazon EC2 On-Demand Pricing AWS, pricing page, accessed October 16, 2026.
  42. Elastic Load Balancing pricing AWS, pricing page, accessed October 16, 2026.
  43. AWS WAF pricing AWS, pricing page, accessed October 16, 2026.
  44. COST08-BP02 Select components to optimize data transfer cost AWS, whitepaper, accessed October 16, 2026.
  45. COST08-BP03 Implement services to reduce data transfer costs AWS, whitepaper, accessed October 16, 2026.
  46. COST10-BP01 Develop a workload review process AWS, whitepaper, accessed October 16, 2026.
  47. Filtering the data that you want to view AWS, documentation, accessed October 16, 2026.
  48. Performance design patterns for Amazon S3 AWS, documentation, accessed October 16, 2026.
  49. Hosting a static website using Amazon S3 AWS, documentation, accessed October 16, 2026.
  50. AWS Price List: Amazon CloudFront, edge locations (offer file of October 3, 2026) AWS, price list, accessed October 16, 2026.
  51. AWS Price List: Amazon CloudFront, eu-west-3, Lambda@Edge (offer file of October 3, 2026) AWS, price list, accessed October 16, 2026.
  52. AWS Price List: Amazon CloudFront, eu-central-1, Origin Shield (offer file of October 3, 2026) AWS, price list, accessed October 16, 2026.
  53. AWS Price List: Amazon CloudFront, eu-west-1, Origin Shield (offer file of October 3, 2026) AWS, price list, accessed October 16, 2026.
  54. AWS Price List: Amazon CloudFront, eu-west-2, Origin Shield (offer file of October 3, 2026) AWS, price list, accessed October 16, 2026.
  55. AWS Price List: CloudFront flat-rate plans (offer file of September 11, 2026) AWS, price list, accessed October 16, 2026.
  56. AWS Price List: AWS Data Transfer, eu-west-3 (offer file of September 16, 2026) AWS, price list, accessed October 16, 2026.
  57. AWS Price List: Amazon S3, eu-west-3 (offer file of October 15, 2026) AWS, price list, accessed October 16, 2026.
  58. AWS Price List: Elastic Load Balancing, eu-west-3 (offer file of September 11, 2026) AWS, price list, accessed October 16, 2026.
  59. AWS Price List: AWS WAF, global (offer file of September 14, 2026) AWS, price list, accessed October 16, 2026.
  60. AWS Price List: Amazon Route 53, global (offer file of September 11, 2026) AWS, price list, accessed October 16, 2026.

Quotations from AWS documentation are used under CC BY-SA 4.0.

Amazon Web Services, AWS and the names of AWS services are trademarks of Amazon.com, Inc. or its affiliates. Diagrams use the AWS Architecture Icons, unaltered.

More articles

AWS · Networking

AWS NAT Gateway and data transfer: pricing and how to cut the bill

Read
AWS · AI

Amazon Bedrock pricing: how to cut the bill

Read
AWS · Cost management

AWS Cost Explorer: reading your bill

Read