CloudFront Functions vs Lambda@Edge
- 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 Functions | Lambda@Edge |
|---|---|---|
| Ngôn ngữ runtime | JavaScript | Node.js, Python |
| Khả năng xử lý request | Hàng triệu request/giây | Hà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 đa | 2 MB | 128 MB đến tối đa 10 GB |
| Kích thước gói deploy | 10 KB | 1 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@Edge | Không có free tier, tính phí theo request & thời gian chạy |
Gợi ý dùng khi nào?
| Tình huống | Gợ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.
- Chuẩn hoá cache key (Cache Key Normalization)
- 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
- Thời gian thực thi dài hơn (several ms hoặc hơn)
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?