Sử dụng AWS CloudFront
- Tháng Sáu 22, 2022
- Posted by: codestar
- Category: Uncategorized
Đối với những ai nghiên cứu và làm việc trên AWS thì AWS CloudFront là một service không còn quá xa lạ với mọi người vì những lợi ích mà nó mang lại. CloudFront hỗ trợ phân phối nội dung tới các địa điểm trên toàn cầu. Nội dung của các file tĩnh như html, css, image, … sẽ được lưu trữ lại tại các edge location của AWS, do đó, gần người dùng hơn. Ok, hiểu sơ sơ vậy rồi, vậy chúng ta sẽ cùng xem xét đến các Use-case sử dụng của CloudFront nhé.
1. Sử dụng CloudFront kết hợp với S3 để tăng tốc độ phân phối các file dữ liệu.
Đây là Use case có thể nói là cơ bản nhất của CloudFront. CloudFront sẽ giúp tăng tốc độ truyền tải các file tĩnh như html, css, js, ảnh, video, … bằng cách sử dụng AWS Backbone Network và các quy tắc Cache lại dữ liệu.
Khi sử dụng CloudFront kết hợp với S3, chúng ta có thể sử dụng OAI. OAI cho phép chúng ta thiết lập chỉ cho phép CloudFront truy cập vào S3, không cho phép những thao tác khác chưa được xác thực access vào S3. Bằng việc thiết lập như vậy, chúng ta hạn chế các bên thứ 3 khai thác các thông tin từ S3 và cũng che được các thông tin từ S3 như bucket name..
2. Tạo một layer giữa origin và S3 để giảm lưu lượng truy cập lên Origin.
Origin là thành phần quan trọng trong hệ thống, vì đối với các hệ thống mang tính global, thường chỉ có 1 số lượng nhỏ các Origin. Do đó, việc bảo vệ các origin khỏi lượng lớn các truy cập thông thường là điều cần thiết. CloudFront là thành phần nằm ngoài và tiếp xúc với phía User gần nhất, do đó khi truy cập qua 1 bên server khác sẽ giảm thiểu lượng truy cập tới các origin server.
Tuy nhiên cần lưu ý một điều là CloudFront là 1 server có tác dụng chủ yếu là cache. Do đó, các request khi gửi lên server mà có sự sai khác nhau 1 chút, sẽ được coi là cache missed và request lại được chuyển về phía origin. Do đó, nếu không có các biện pháp đảm bảo an toàn nào khác thì các bên tấn công vẫn có thể tấn công vào origin server, gây tổn hại đến khả năng đáp ứng của hệ thống và gây tốn kém chi phí.
Chính vì lý do đó, CloudFront thường được thiết lập kèm theo một số Policy đi kèm, chúng ta có thể tự customize các loại Policy, tuy nhiên nhìn chung thì sử dụng các loại Managed Policy của CloudFront cũng đủ cho đại đa số các trường hợp, và use case. Cụ thể 5 loại managed policy là:
– CachingOptimized
– CachingOptimizedForUncompressedObjects
– CachingDisabled
– Elemental-MediaPackage
– Amplify
Với các loại file cache thông thường, chúng ta có thể sử dụng CachingOptimized và CachingOptimizedForUncompressedObjects dành cho 2 trường hợp 2 cách kiểu lưu trữ dữ liệu dạng Compressed và Uncompressed. Một số loại file như hình ảnh và âm thanh chụp ở chế độ gốc Uncompressed thì chúng ta có thể sử dụng CachingOptimizedForUncompressedObjects để tránh bị giảm dung lượng và chất lượng khi truyền tải files. Còn đại đa số các file tĩnh html, css, … sử dụng phiên bản compressed cũng không có nhiều ảnh hưởng.
3. Sử dụng làm lớp Cache cho Server Backend hoặc Lambda.
Đây là một trường hợp thường sử dụng để bảo đảm giảm tải cho Origin Server. Tuy nhiên nếu sử dụng cho Dynamic Content, cần lựa chọn Policy là CachingDisabled. Vì nếu không, hệ thống của chúng ta sẽ có những biểu hiện không chính xác như: Lúc nào kết quả cũng ra giống nhau dù có thêm, bớt 1 số sản phẩm. Lúc này việc Caching của chúng ta đang không phải là Caching có lợi, do đó nên sử dụng CachingDisable policy.
Ủa vậy CloudFront ở đây có tác dụng gì nhỉ nếu nó không Cache được ? Và đây là nơi Lambda@Edge tỏa sáng. Lambda@Edge là một tính năng của CloudFront. Nói một cách đơn giản và dễ hiểu thì nó giống như việc chúng ta mang Code ở Lambda đi copy vào cái Server ở Edge vậy. Như vậy thì Request sẽ không phải chạy lòng vòng về Lambda ở Origin hoặc Server ở Origin nữa mà vẫn có thể xử lý 1 số Logic đơn giản, hay chúng ta có thể coi là Cache logic. Tất nhiên là Lambda@Edge nó chỉ là một function nho nhỏ nằm ở Edge thôi nên là nó cũng không có đầy đủ các tính năng của Lambda, nhưng nếu hệ thống chúng ta cần một vài thông tin nho nhỏ, ví dụ như gửi request -> trả về thông tin người tạo có chỉnh sửa thì Lambda Edge là lựa chọn hợp lý.
À tới Lambda@Edge, chúng ta cũng đừng quên một function mới toanh mà bên AWS mới giới thiệu vào tháng 3/2021 nhé: CloudFront Functions. Nó sẽ giúp chúng ta deploy code NodeJs (hiện tại) lên Edge location. Chúng ta có thể thắc mắc, ủa vậy Lambda Edge thì có gì khác ? CloudFront Functions là 1 phiên bản nhỏ của Lambda Edge, nó chỉ viết được mỗi code NodeJS (ở thời điểm hiện tại) và cũng hạn chế 1 cơ số thứ so với Lambda. Nhưng được cái rẻ hơn và phù hợp với nhiều Use-case phía người dùng hơn.
4. Sử dụng với Elemental MediaStore để streaming toàn cầu.
Elemental MediaStore là giải pháp hỗ trợ streaming. Nhưng muốn stream tại nhiều địa điểm hơn thì cần làm thế nào ? CloudFront là giải pháp của chúng ta. Ở đây thì CloudFront không làm quá nhiều, chỉ đơn giản là tăng tốc độ truyền tải dữ liệu, phân phối content từ nguồn stream tới các subscriber một cách nhanh chóng. Về chi tiết cách truyền tải và hệ thống hoạt động thế nào, chúng ta có thể nghiên cứu thêm ở Whitepaper của AWS nhé: https://d1.awsstatic.com/whitepapers/amazon-cloudfront-for-media.pdf
Vậy là hôm nay chúng ta đi qua một vài Use case dành cho CloudFront rồi nhé. Chúc mọi người học AWS vui. Tham khảo lộ trình học AWS Practical tại CodeStar Academy để có những trải nghiệm thực tiễn trên hệ thống. Dưới đây là link lộ trình chi tiết của khóa học AWS, mời anh em ghé thăm nhé: https://codestar.vn/product/aws-co-ban/. Ngay sau khóa học AWS, anh em có thể tham khảo luyện thi chứng chỉ AWS – SAA. Tại CodeStar Academy, định hướng học và luyện thi cho Học viên cũng rất rõ ràng, mọi người có thể tham khảo ngay khóa Luyện thi AWS – SAA tại link: https://codestar.vn/product/luyen-thi-aws-solution-architect-associate/.