You already know how users find your website (DNS and Route 53). Now we'll see how to make your content reach them fast, wherever they are in the world. That’s the mission of CloudFront, AWS’s Content Delivery Network (CDN). We already mentioned it when talking about edge locations in Chapter 3; now we’ll understand it in depth.

The problem: distance adds slowness

Imagine your server is in Ireland (Chapter 3) and a user visits you from Japan. Every time they request something, the request has to cross half the world and come back. Even if it travels at the speed of light, that distance adds latency (delay): the website loads slowly for that user.

User in Japan ──── (half the planet) ────► Server in Ireland
               ◄──── (and back) ─────────
               = slow for the Japanese user

The solution: a CDN (Content Delivery Network)

A CDN (Content Delivery Network) solves this by bringing the content closer to users. Instead of everyone reaching your distant server, the CDN stores copies of your content in many points distributed around the world (the edge locations from subchapter 3.3). Each user receives the content from the point closest to them.

            ┌── Edge in Tokyo ──► users in Japan (fast)
Your server ┼── Edge in Madrid ─► users in Spain (fast)
 (origin)   └── Edge in São Paulo ► users in Brazil (fast)

CloudFront is AWS’s CDN, with hundreds of edge locations all over the planet.

Analogy: without a CDN it’s like having a single store in a city: all customers in the country have to travel there. With a CDN it’s like opening branches in every city: each customer goes to the nearest one. Much faster for everyone.

The key concepts of CloudFront

Distribution

A distribution is the CloudFront configuration for your content: it defines where the content comes from (the origin), how it’s cached, which domain it uses, etc. It’s the “unit” you create in CloudFront.

Origin

The origin is the original source of your content, where CloudFront fetches it the first time. It can be:

  • An S3 bucket (very common for static websites, remember subchapter 5.5).
  • A load balancer (Chapter 13) in front of your servers.
  • Any web server, even outside AWS.
   Users ──► CloudFront (edge) ──► Origin (S3 or load balancer)
                  (the copies)         (the original source)

Cache: the heart of CloudFront

The cache is what makes a CDN magical. The first time someone in a region requests a file, CloudFront fetches it from the origin and stores a copy in the nearby edge location. Subsequent requests from that area are served directly from the copy, without bothering the origin.

1st request (from Japan):
   User → Tokyo Edge (doesn’t have it) → Ireland Origin → saves copy → user
   (slow only this time)

2nd and subsequent requests (from Japan):
   User → Tokyo Edge (already has the copy!) → user
   (super fast, doesn’t touch the origin)

Double benefit:

  • Speed: users receive the content from nearby.
  • Less load on your origin: most requests are handled by the cache, not your server. Your origin works much less (and can be smaller and cheaper).

TTL: how long a copy lasts in cache

An important question: how long does CloudFront keep a copy before fetching it again from the origin? That’s controlled by the TTL (Time To Live), the cache’s “lifetime”.

  • Long TTL: the copy lasts a long time. Maximum speed and minimum work for the origin, but changes take longer to show.
  • Short TTL: the copy refreshes often. Changes are seen sooner, but the origin works more.

Practical rule: content that doesn’t change (images, CSS, videos, static website files) → long TTL. Content that changes often → short TTL or no cache.

Invalidation: forcing a refresh

What if you change a file and want it to update now, without waiting for the TTL? You can do an invalidation: you tell CloudFront “delete this copy from all edge locations,” and it will fetch it from the origin on the next request. Useful after publishing a new version of your website.

What content benefits the most?

CloudFront shines especially with static content: images, videos, style sheets (CSS), JavaScript, downloadable files, and static websites (S3). This content is the same for all users, so caching it is ideal. It also speeds up dynamic content, though the gains are smaller there.

Real-world example: a digital newspaper with readers all over the world puts CloudFront in front of its website. Photos, videos, and design are served from each reader’s edge location (super fast), and the newspaper’s server only handles generating new articles. Result: the website flies for everyone and the server handles millions of visits without getting overloaded.

What you should remember

  • CloudFront is AWS’s CDN: it brings your content closer to users by storing copies in edge locations around the world, reducing latency.
  • A distribution is your CloudFront configuration; the origin is the original source (an S3 bucket, a load balancer, etc.).
  • The cache is the key: the first request fetches the content from the origin and stores a copy; subsequent requests are served from the copy. Double benefit: speed + less load on the origin.
  • The TTL defines how long a copy lasts (long for static content, short for changing content); invalidation forces an immediate refresh.
  • It shines with static content (images, videos, CSS, JS, S3 websites), though it also speeds up dynamic content.

In the next subchapter, we’ll see how to make your site secure with HTTPS using free SSL/TLS certificates with ACM.

Cloud, AWS & Terraform — From Zero to Expert

Chapter 1 · What is cloud computing

Chapter 2 · The cloud market and major providers

Chapter 3 · Regions, availability zones and edge

Chapter 4 · Compute: EC2

Chapter 5 · Storage: S3

Chapter 6 · Networking: VPC

Chapter 7 · Identity and access: IAM

Chapter 8 · Managed databases

Chapter 9 · Why Infrastructure as Code

Chapter 10 · HCL: the Terraform language

Chapter 11 · Providers and state

Chapter 12 · Your first real infrastructure in Terraform

Chapter 13 · Load balancing and auto scaling

Chapter 14 · Serverless with Lambda

Chapter 15 · Messaging and events

Chapter 16 · Content delivery and DNS

Chapter 17 · Containers on AWS

Chapter 18 · Modules: reuse and composition

Chapter 19 · Workspaces and environment management

Chapter 20 · Remote backends and locking

Chapter 21 · Infrastructure testing

Chapter 22 · Terraform in CI/CD

Chapter 23 · Defense in depth

Chapter 24 · Observability: logs, metrics and traces

Chapter 25 · Cost optimization

Chapter 26 · High availability and disaster recovery

Chapter 27 · AWS Well-Architected Framework

Chapter 28 · Serverless architectures at scale

Chapter 29 · Data platforms on AWS

Chapter 30 · Multi-account and landing zones

Chapter 31 · Platform Engineering and Internal Developer Platform

Chapter 32 · Relevant AWS certifications

Chapter 33 · Projects to consolidate what you've learned

Chapter 34 · Resources and community

© Copyright 2024. All rights reserved