CloudFront Functions vs Lambda@Edge

3 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem
  • Nhiều ứng dụng hiện đại thực thi một phần logic ở phía edge.
  • Edge Function:
    • Là đoạn code bạn viết và gắn vào các CloudFront distributions.
    • Chạy gần người dùng của bạn để giảm độ trễ.
  • CloudFront cung cấp hai loại: CloudFront Functions và Lambda@Edge
  • Bạn không cần quản lý máy chủ nào cả, được deploy global.
  • Use case: tuỳ biến nội dung CDN
  • Chỉ trả tiền cho những gì bạn sử dụng
  • Hoàn toàn là serverless

CloudFront Functions

CloudFront Functions là một tính năng serverless do AWS cung cấp, cho phép bạn chạy các đoạn mã JavaScript ngay tại edge location của Amazon CloudFront. Mục tiêu chính là thực hiện các tác vụ xử lý HTTP request/response đơn giản, với độ trễ cực thấp và khả năng scale cao (hàng triệu request/giây).

  • Là các lighweight function, viết bằng JavaScript.
  • Dùng cho các tuỳ biến CDN quy mô lớn, nhạy cảm với độ trễ.
  • Thời gian khởi động dưới 1 mili-giây, xử lý hàng triệu request/giây.
  • Dùng để thay đổi request/response từ viewer:
    • Viewer Request: sau khi CloudFront nhận request từ viewer.
    • Viewer Response: trước khi CloudFront trả response về cho viewer.
  • Tính năng native của CloudFront (quản lý mã hoàn toàn trong CloudFront).

Lambda@Edge

  • Là các Lambda function được viết bằng Node.js hoặc Python.
  • Có khả năng mở rộng tới hàng nghìn request/giây.
  • Dùng để thay đổi các request/response của CloudFront tại 4 giai đoạn:
    • Viewer Request – khi CloudFront nhận request từ client (viewer).
    • Origin Request – trước khi CloudFront gửi request đến origin (thường là S3, EC2, hay API Gateway).
    • Origin Response – khi CloudFront nhận response từ origin.
    • Viewer Response – trước khi CloudFront trả response về cho viewer.
  • Viết code ở một region (ví dụ: us-east-1), CloudFront sẽ replicate (sao chép) đến toàn bộ các edge location.

So sánh CloudFront Functions vs Lambda@Edge

Tiêu chíCloudFront FunctionsLambda@Edge
Ngôn ngữ runtimeJavaScriptNode.js, Python
Khả năng xử lý requestHàng triệu request/giâyHàng nghìn request/giây
Trigger hỗ trợ

- Viewer Request

- Viewer Response

- Viewer Request

- Viewer Response

- Origin Request

- Origin Response

Thời gian thực thi tối đa< 1ms (sub-millisecond)5–10 giây
Dung lượng bộ nhớ tối đa2 MB128 MB đến tối đa 10 GB
Kích thước gói deploy10 KB1 MB – 50 MB
Truy cập mạng hoặc file system❌ Không hỗ trợ✅ Có hỗ trợ
Truy cập request body❌ Không hỗ trợ✅ Có hỗ trợ
Chi phíCó free tier, rẻ hơn khoảng 1/6 giá Lambda@EdgeKhông có free tier, tính phí theo request & thời gian chạy

Gợi ý dùng khi nào?

Tình huốngGợi ý
Custom header, rewrite URL đơn giản, check bot/user-agent✅ CloudFront Functions
Xử lý nội dung phức tạp, gọi API, xử lý body, xử lý logic nâng cao✅ Lambda@Edge

Khi nào dùng CloudFront Functions vs Lambda@Edge

  • CloudFront Functions – Xử lý nhẹ, cực nhanh, scale lớn
    • Chuẩn hoá cache key (Cache Key Normalization)
      → Biến đổi các thuộc tính của request (header, cookie, query string, URL...) để tạo ra cache key tối ưu.
    • Thao tác với HTTP headers (Header Manipulation)
      → Chèn / chỉnh sửa / xoá các HTTP headers trong request hoặc response.
    • Viết lại URL hoặc redirect (URL Rewrites/Redirects)
      → Dùng cho các logic định tuyến đơn giản, chuyển hướng.
    • Xác thực và phân quyền (Request Authentication & Authorization)
      → Kiểm tra token (JWT, v.v.) để cho phép hoặc từ chối request.
  • Lambda@Edge – Xử lý phức tạp, cần nhiều tài nguyên
    • Thời gian thực thi dài hơn (several ms hoặc hơn)
      → Dùng cho logic nặng hơn mà CloudFront Function không xử lý được.
    • Điều chỉnh CPU/memory theo yêu cầu
    • Dùng các thư viện ngoài (3rd-party libraries)
      → Ví dụ: sử dụng AWS SDK để gọi DynamoDB, S3,...
    • Cần truy cập network bên ngoài hoặc gọi dịch vụ ngoài AWS
    • Cần truy cập vào hệ thống file hoặc body của HTTP request

Tóm lại:

  • Nếu mục tiêu của bạn là thay đổi nội dung trả về từ origin (ví dụ: điều chỉnh dữ liệu từ S3 trước khi gửi tới client), bạn sẽ sử dụng Origin Response.
  • Nếu mục tiêu của bạn là thay đổi nội dung trả về từ CloudFront tới client (ví dụ: thay đổi headers hoặc cookies trước khi nó được gửi về client), bạn sẽ sử dụng Viewer Response.
Bạn thấy bài này thế nào?