Quay lại

Toàn Tập Về Data Transfer Trong CloudFront: Cách Tính, Nguyên Nhân Tốn Chi Phí, Giải Pháp Tối Ưu Chuyên mục Devops    2025-04-10    17 Lượt xem    17 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Gần đây trong một dự án cá nhân sử dụng AWS, mình bất ngờ khi nhận được hóa đơn CloudFront với chi phí tăng vọt do Data Transfer Out (DTO) vượt hơn 15TB/tháng.
Sau khi kiểm tra, mình phát hiện nguyên nhân đến từ việc người dùng tải xuống các file dung lượng lớn (PDF, video, v.v.) — hoặc bị bot truy cập liên tục để đọc các file từ S3 thông qua CloudFront, dẫn đến lượng dữ liệu truyền tải ra ngoài tăng đột biến và gây tốn phí không ngờ.

Việc dùng CloudFront giúp tốc độ website nhanh hơn nhờ có CDN (Content Delivery Network). Tuy nhiên, nếu bạn bỏ qua việc tối ưu caching, giới hạn truy cập, hay quên theo dõi logs, rất dễ bị Data Transfer Out tăng vọt gây tốn chi phí hàng trăm đố la.


I. Hiểu rõ Data Transfer Trong AWS CloudFront

1. Data Transfer Out là gì?

  • DTO (Data Transfer Out) là dung lượng dữ liệu mà CloudFront gửi ra ngoài, thường là đến người dùng cuối (user)

  • Mỗi khi user tải file (PDF, ảnh, video,...) từ CloudFront → bạn bị tính tiền DTO

2. Data Transfer Giữa CloudFront và S3

  • Khi file đã được cache: CloudFront trả về file ngay, không request lại S3 → KHÔNG tính S3 Transfer

  • Khi file chưa cache / cache hết hạn: CloudFrontgời request về S3Tính Data Transfer from S3 to CloudFront (internal)

💡Lưu ý 1: Data Transfer giữa CloudFront và S3 (cùng region) thường MIỄN PHÍ, nhưng vẫn tính vào cache-miss rate.

II. Cách Tính Data Transfer Chi Tiết Trong CloudFront

1. Tính theo dung lượng file trả về user

  • File PDF 100MB, user download = 100MB DTO

  • 10.000 lần tải = 100MB x 10.000 = ~1.000 GB (~1TB)

2. Partial Download

  • Trường hợp user resume download hoặc chỉ tải 1 phần file, CloudFront vẫn tính dữ liệu đã trả

3. Cache Miss = Gời lại S3 + chậm + đắt

  • Mỗi cache miss = CloudFront fetch lại file từ S3 (dùng bandwidth internal)

  • Sau đó trả về user → DTO vẫn tính bình thường

  • Do đó: Cache-Control đóng vai trò quan trọng

💡 Lưu ý 1: Data Transfer Out trong CloudFront được tính từ các Edge Location (gần user nhất) ra ngoài Internet. Mỗi Edge Location sẽ có đơn giá DTO khác nhau tùy theo khu vực địa lý (US/EU thường rẻ hơn Asia-Pacific). Ngoài ra, AWS áp dụng bậc thang giá — dùng càng nhiều, giá mỗi GB càng rẻ, nhưng vẫn có thể rất tốn nếu không tối ưu caching và kiểm soát truy cập.

Giả sử một người dùng ở Singapore tải một file PDF nặng 300MB từ CloudFront (dữ liệu gốc nằm trong S3).
CloudFront sẽ phục vụ file này từ Edge Location gần Singapore → truyền dữ liệu 300MB ra Internet.

  • DTO tại Asia Pacific (Singapore) có giá ~ $0.114/GB cho 10TB đầu tiên.

  • Trong khi đó, DTO tại US/EU chỉ khoảng ~ $0.085/GB cho cùng mức.
    => Nếu phần lớn user của bạn đến từ châu Á, chi phí truyền tải sẽ cao hơn đáng kể nếu không dùng cache hiệu quả.

Với 15TB như trường hợp của mình, chỉ riêng phần DTO ở Singapore có thể tốn:
15,000 GB x $0.114 = ~$1,710 chỉ cho phần truyền tải — chưa kể các dịch vụ khác.


III. Nguyên Nhân Khiến Data Transfer Out Tăng Vọt

1. File lớn (PDF > 100MB), không được cache

  • Bỏ qua Cache-Control → CloudFront luôn fetch từ S3

  • Mỗi user tải = tốn bằng đó

2. Signed URL nhưng bị spam

  • Mỗi link sống 10 phút, user/bot gọi 100 lần trong 10 phút

  • DTO tính đủ 100 lần x dung lượng file

3. Bot scanner hoặc deep-crawling PDF

  • Các tool SEO, AI, bot Google,... tự động tải file

  • Đặc biệt file không bảo vệ hoặc được public

4. Không bật access log: không theo dõi được người dùng nào


IV. Các Giải Pháp Cứu CloudFront Tốn Chi Phí

1. Gán Cache-Control vào S3

  • Để CloudFront cache file PDF lâu hơn

  • Tránh cache miss liên tục

aws s3 cp s3://bucket/filename.pdf \
         s3://bucket/filename.pdf \
         --metadata-directive REPLACE \
         --cache-control "public, max-age=31536000, immutable"

2. Bật AWS WAF để chặn spam

  • Rule: chặn IP nếu request > X lần/phút

  • Ví dụ: >50 request trong 5 phút = block 10 phút

3. Signed URL cá nhân hóa

  • Kèm theo user ID / session ID

  • Backend tạo link duy nhất cho mỗi lần

  • Dễ log/tracking hoặc blacklist

4. Log access để theo dõi

  • Bật CloudFront Access Logs

  • Đại diện IP, user-agent, địa chỉ URL tải, tốc độ

5. Đổi file PDF thành inline viewer / chia nhỏ

  • Thay vì cho tải toàn bộ file PDF

  • Dùng PDF.js hoặc viewer preview file


V. Có Nên Bỏ CloudFront Không?

Tiêu chí CloudFront CDN Truy cập S3 trực tiếp
Tốc độ Có CDN toàn cầu Phụ thuộc vào region
Cache Không
Chống bot, spam Có WAF, signed URL Phải tự xây
Tính bốc chi phí DTO = User Tải DTO = User Tải
Miễn phí transfer từ S3 MIỄN PHÍ (same region) KHÔNG

Do đó: KHÔNG nên bỏ CloudFront nếu traffic lớn hoặc dữ liệu nặng


VI. Kết Luận & Khuyên Nghiệm

  • DTO trong CloudFront = điểm chính gây chi phí cao nếu file lớn + bị tải nhiều

  • Hãy:

    • Gán Cache-Control cho file từ S3

    • Theo dõi Popular Objects Report + Access Logs

    • Dùng Signed URL + AWS WAF kèm theo user

    • Tính số lượng download và lượng data theo user

 

Việc tối ưu Data Transfer trong CloudFront không khó, chỉ cần theo dõi sát, set header đúng và chủ động trong việc chống spam. Một vài thao tác nhỏ giúc tiết kiệm hàng trăm đố la mỗi tháng!

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday