CloudFront

5 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

AWS CloudFront

AWS CloudFront là dịch vụ Content Delivery Network (CDN) do Amazon Web Services cung cấp, giúp phân phối nội dung tĩnh và động (static & dynamic content) đến người dùng trên toàn thế giới với độ trễ thấp và tốc độ cao, thông qua mạng lưới hàng trăm Edge Location.

  • 216 điểm hiện diện (Point of Presence) toàn cầu (các edge location)
  • Bảo vệ khỏi tấn công DDoS (do phân tán toàn cầu), tích hợp với AWS Shield, AWS Web Application Firewall

Sơ đồ thể hiện cách AWS CloudFront hoạt động:

  • Người dùng từ nhiều khu vực trên thế giới (ví dụ: Mỹ, châu Á) sẽ gửi request đến ứng dụng.
  • Các request này được định tuyến đến Edge Location gần nhất (chấm màu xanh – “Edge Locations”).
  • Nếu nội dung đã được cache tại đó, CloudFront sẽ trả về ngay từ Edge mà không cần truy xuất đến origin , giúp tăng tốc độ phản hồi và giảm latency.
  • Nếu chưa có cache, nội dung sẽ được truy xuất từ S3 Bucket hoặc máy chủ origin, sau đó được cache lại tại Edge.
  • Các chấm màu tím thể hiện khu vực có nhiều Edge Location gần nhau (Multiple Edge Locations).
  • Các vòng tròn cam biểu thị Regional Edge Caches – nơi lưu giữ cache lâu dài hơn và có khả năng phục vụ nhiều Edge Location khác nhau, giúp giảm tải truy xuất đến origin.

Origins

S3 bucket

  • Dùng để phân phối file và cache tại các edge location
  • Tăng cường bảo mật với CloudFront Origin Access Control (OAC)
  • OAC đang thay thế Origin Access Identity (OAI)
  • CloudFront có thể dùng làm điểm ingress (để upload file lên S3)

Custom Origin (HTTP)

  • Application Load Balancer
  • EC2 instance
  • S3 website (bucket cần được kích hoạt chế độ static website trước)
  • Bất kỳ HTTP backend nào bạn muốn
  • Thông thường CloudFront không đứng trực tiếp trước API Gateway, vì API Gateway đã có CDN tích hợp sẵn (dựa trên CloudFront) khi bạn dùng REST API hoặc HTTP API

CloudFront high level

  • Client gửi request
    • VD: GET /beach.jpg?size=300x300 gửi từ trình duyệt với header như:
User-Agent: Mozilla/4.0 ...
Host: www.example.com
Accept-Encoding: gzip, deflate
  • CloudFront Edge Location
    • Điểm Edge Location gần client nhất nhận request.
    • Kiểm tra trong Local Cache xem đã có file này chưa:
      • Nếu có → trả về ngay cho client.
      • Nếu chưa có → forward request đến origin.
  • Origin Có thể là:
    • Amazon S3: chứa file tĩnh.
    • HTTP server (EC2, API Gateway, ALB, ...).
    • Lấy dữ liệu từ origin → gửi về edge → lưu vào local cache → trả lại client.
User-Agent: Mozilla/4.0 ... Host: www.example.com Accept-Encoding: gzip, deflate 
Ví dụ về origin
  • ALB làm origin:
    • Edge Location gọi đến Application Load Balancer (ALB).
    • ALB bắt buộc phải Public.
    • ALB phải allow IP Public của các Edge Location.
      • Security Group của ALB phải cho phép inbound traffic đến từ dải IP public của các CloudFront Edge Location.
    • ALB sẽ forward request về EC2 (nằm trong Private subnet cũng được).
    • EC2 instance chỉ cần allow Security Group của ALB, không cần public.

Giới hạn truy cập theo vị trí địa lý (Geo Restriction)

  • Bạn có thể giới hạn ai có quyền truy cập vào CloudFront Distribution của bạn, dựa trên quốc gia của người dùng.
  • Allowlist (Danh sách cho phép):
    • Chỉ cho phép người dùng truy cập nội dung nếu họ đang ở trong danh sách các quốc gia được phép.
  • Blocklist (Danh sách chặn):
    • Chặn người dùng truy cập nội dung nếu họ đến từ một trong các quốc gia nằm trong danh sách cấm.

Pricing

  • Các Edge Location của CloudFront được triển khai khắp nơi trên toàn cầu.
  • Chi phí truyền dữ liệu ra ngoài (Data Out) sẽ khác nhau tùy theo từng Edge Location.
Bạn có thể giảm số lượng Edge Location để tối ưu chi phí
  • Có 3 nhóm giá (price classes):
    • Price Class All:
      • Sử dụng tất cả các region (Edge Location toàn cầu)
        → Hiệu năng cao nhất (best performance)
    • Price Class 200:
      • Sử dụng hầu hết các region, nhưng loại trừ các region có chi phí cao nhất
    • Price Class 100:
      • Chỉ sử dụng các region có chi phí thấp nhất

Cache Invalidations

  • Khi bạn cập nhật dữ liệu trên back-end origin, CloudFront không tự biết điều đó
    → CloudFront chỉ lấy nội dung mới sau khi TTL (Time-To-Live) hết hạn
  • Tuy nhiên, bạn có thể buộc CloudFront cập nhật cache ngay lập tức (không cần đợi TTL)
    → Bằng cách thực hiện CloudFront Invalidation
  • Có thể invalidate toàn bộ cache (*) hoặc chỉ một đường dẫn cụ thể (/images/*, /index.html, ...)
  • Người dùng request /index.html từ CloudFront.
  • CloudFront trả về nội dung cũ đang cache tại Edge Location.
  • Khi backend cập nhật file (trên S3 bucket hoặc nguồn gốc khác), nội dung mới không được tự động cập nhật vào cache.
  • Sau khi Invalidate /index.html và /images/*, CloudFront sẽ xóa cache tại các Edge Location.
  • Các request kế tiếp sẽ fetch nội dung mới từ origin (S3 Bucket) → sau đó được cache lại.

So sánh CloudFront Vs S3 Cross Region Replication

CloudFront:

  • Mạng Global Edge
  • File được cache với TTL (có thể là 1 ngày)
  • Tuyệt vời cho static content cần được phân phối toàn cầu
    • Static content = không đổi theo thời gian/người dùng → cache hiệu quả → CloudFront là best choice

S3 Cross Region Replication:

  • Cần cấu hình riêng cho từng Region muốn replicate
  • File gần như được cập nhật gần như thời gian thực (real-time update)
  • Chỉ cho phép đọc (read-only)
  • Tuyệt vời cho dynamic content cần độ trễ thấp tại một vài Region
    • Dynamic content = thay đổi thường xuyên → cần replication để giữ đồng bộ → dùng Cross Region Replication
Bạn thấy bài này thế nào?