Amazon CloudFront là gì? Tăng Tốc Load Web Toàn Cầu Với CDN Của AWS
Hồi mới deploy website lên AWS EC2 region Singapore, mình nghĩ vậy là ổn rồi. Nhưng khi bạn ở Mỹ truy cập, họ kêu load chậm như rùa. Kiểm tra lại thì ping từ US đến Singapore mất ~200ms — nhân với mỗi request CSS, JS, ảnh... tổng cộng trang load mất gần 4 giây. Đó là lúc mình thực sự hiểu CloudFront không phải tính năng thêm cho sang, mà là thứ bắt buộc nếu bạn có user ở nhiều quốc gia.
Amazon CloudFront là gì? Hiểu đơn giản nhất
CloudFront là dịch vụ CDN (Content Delivery Network) của AWS. Hãy hình dung như một mạng lưới các kho hàng mini phân bổ khắp thế giới. Thay vì mọi người đều phải đặt hàng từ nhà máy trung tâm (origin server của bạn), CloudFront sao chép và lưu bản sao tại hàng trăm kho địa phương (Edge Locations). Khi user request, họ nhận hàng từ kho gần nhất — nhanh hơn rất nhiều.
Tính đến 2026, CloudFront có hơn 450 điểm Edge Location tại 90+ thành phố trên toàn cầu. Khi user ở TP.HCM truy cập website, request được route đến Edge Location Singapore hoặc Bangkok thay vì bay về Oregon hay Virginia. Latency giảm từ 200-300ms xuống còn 20-50ms — tức là nhanh hơn 5-10 lần.
CloudFront không chỉ cache static content. Nó hỗ trợ: dynamic content acceleration, WebSocket, HTTP/2, HTTP/3 (QUIC), real-time streaming, Lambda@Edge để chạy code ngay tại edge, và tích hợp sẵn với AWS WAF để chống DDoS/bot.
Khi nào bạn thực sự cần CloudFront?
CloudFront không phải giải pháp cho mọi bài toán. Đây là 3 trường hợp điển hình:
- Website có user quốc tế: Nếu server đặt ở Singapore nhưng có traffic từ Châu Âu hay Mỹ, CloudFront giảm latency đáng kể. Mỗi 100ms giảm latency tương đương ~1% tăng conversion rate theo nghiên cứu của Google.
- Phân phối file lớn (video, software): Upload video lên S3, dùng CloudFront phân phối — chi phí chỉ bằng 1/5 so với serve trực tiếp từ EC2, băng thông được tối ưu qua AWS backbone network thay vì public internet.
- React/Vue SPA hoặc static website: Host trên S3 + CloudFront HTTPS + custom domain = stack production chuẩn với chi phí dưới 5 USD/tháng cho hầu hết dự án cá nhân/startup nhỏ.
Hướng dẫn thiết lập CloudFront + S3 từ A đến Z
Dưới đây là flow thiết lập CloudFront distribution với S3 origin — phù hợp cho static website hoặc SPA.
Bước 1: Tạo S3 bucket và upload content. Tạo S3 bucket, upload file. Quan trọng: KHÔNG bật public access cho bucket — CloudFront sẽ dùng OAC (Origin Access Control) để truy cập.
Bước 2: Tạo CloudFront Distribution. Vào CloudFront Console, Create distribution. Các setting quan trọng: Origin domain = S3 bucket của bạn; Origin Access = OAC (recommended); Viewer protocol policy = Redirect HTTP to HTTPS; Cache policy = CachingOptimized; Default root object = index.html.
Bước 3: Cập nhật S3 bucket policy. Sau khi tạo distribution, AWS gợi ý bucket policy — copy và paste vào S3:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {"Service": "cloudfront.amazonaws.com"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::ACCOUNT-ID:distribution/DIST-ID"
}
}
}]
}Bước 4: Thêm custom domain và SSL. Thêm Alternate domain names (CNAME) như www.myapp.com. Request SSL certificate qua ACM — miễn phí, phải tạo ở region us-east-1. Tạo CNAME record ở DNS trỏ về CloudFront domain (xxxx.cloudfront.net).
Bước 5: Xử lý SPA routing (React/Vue). Thêm Custom Error Response trong CloudFront: khi trả về 403/404, redirect về /index.html với HTTP 200. Không làm bước này thì user F5 ở /about sẽ bị 403 error.
Mẹo thực chiến: Khi cần invalidate cache sau deploy, dùng
aws cloudfront create-invalidation --distribution-id DIST_ID --paths "/*". Nhưng thay vì invalidate toàn bộ, hãy dùng versioned filenames (vd: main.a3f2c1.js) — cache tự hết hạn theo TTL và không tốn phí invalidation.
Sai lầm phổ biến và cách tránh
1. Để TTL quá cao cho dynamic content: Nếu API response trả về max-age=86400 mà quên không set riêng behavior cho /api/*, user sẽ thấy data cũ cả ngày. Fix: tạo behavior riêng cho /api/* với TTL = 0 hoặc dùng Cache policy CachingDisabled.
2. Quên enable compression: CloudFront hỗ trợ gzip/Brotli tự động nhưng mặc định tắt. Enable Compress objects automatically trong cache behavior — HTML/CSS/JS thường giảm 60-80% kích thước.
3. Dùng OAI thay vì OAC: Origin Access Identity (OAI) là cách cũ, AWS đã recommend chuyển sang Origin Access Control (OAC) từ 2022. OAC hỗ trợ SSE-KMS encryption và signing behavior tốt hơn.
FAQ — những câu hỏi thực tế nhất
Q: CloudFront có đắt không? Chi phí tính như thế nào?A: Chi phí chính gồm 2 phần: data transfer out (khoảng $0.0085-$0.085/GB tùy region) và HTTP request ($0.0075-$0.016 per 10,000 requests). Với website nhỏ ~10GB/tháng, chi phí thường dưới $5. AWS Free Tier bao gồm 1TB data transfer và 10 triệu HTTP requests/tháng trong năm đầu.
Q: CloudFront có thể cache API response không hay chỉ static files?A: Có thể cache API response hoàn toàn. CloudFront cache dựa trên URL + headers bạn cấu hình. Bạn có thể set TTL ngắn (vd: 60 giây) cho API endpoint, giúp giảm load origin server đáng kể trong các spike traffic.
Q: Thời gian deploy một CloudFront distribution mất bao lâu?A: Tạo mới distribution thường mất 5-15 phút để propagate ra toàn bộ edge network. Invalidation sau deploy mất 1-2 phút. Để kiểm tra: dùng
curl -I https://your-domain.com/file.jsvà xem headerX-Cache: Hit from cloudfronthayMiss from cloudfront.
CloudFront không phải nice-to-have — nó là standard
Khi bạn đã deploy lên AWS, không dùng CloudFront giống như mở shop mà không có nhân viên giao hàng nhanh — mọi thứ vẫn chạy, nhưng customer experience kém hơn đáng kể và chi phí thực ra không rẻ hơn. CDN đã trở thành tiêu chuẩn của mọi production web app hiện đại, và CloudFront tích hợp sâu với toàn bộ ecosystem AWS là lựa chọn tự nhiên nhất. Bài tiếp theo trong series sẽ đi sâu về AWS Auto Scaling và Load Balancer — giải pháp để website không bao giờ sập dù traffic tăng 10x đột ngột.
