Header Ads Widget

Ticker

6/recent/ticker-posts

Xây dựng hệ thống CDN cache S3 bằng Cloudfront kết hợp Cloudflare

Keywords: Build system CDN cache S3 by both Cloudflare and Cloudfront

Hôm trước mình có hướng dẫn các bạn cách xây dựng hệ thống CDN với S3 và Cloudflare rồi đúng không, nhưng cách trên thật ra cũng sẻ có một vài sai sót nhỏ, vì để cho phép Cloudflare có thể connect tới S3 thì bắt buộc mình phải settings public policy, điều này đã ảnh hưởng một chút về vấn đề security thành ra lần này mình sẻ hướng dẫn các bạn cách thực hiện kết hợp S3 và Cloudfront và thêm vào đó chúng ta sẻ có một lớp Cloudflare bên ngoài nữa.

Nhìn hình trên thì chắc ai cũng đã đoán được một phần nào về mô hình mà mình dự định triển khai rồi đúng không nào, à sẵn tiện mình sẻ để link bài viết cũ mà mình đã viết trước đây, các bạn có thể xem lại ở link dưới nha
Giờ thì bắt đầu thực hiện cùng mình nào, ở phần S3 thì chúng ta phải có một bucket để thực hiện vì vậy nếu ai đã có S3 rồi thì thôi mình không nói đến, nhưng nếu như ai mà chưa có S3 thì thực hiện tạo S3 giúp mình đi nhé
Sau đó chúng ta thực hiện truy cập vào Cloudfront
Tại Dashboard của CloudFront chúng ta thực hiện chọn "Create Distribution"
Chúng ta tiếp tục thực hiện lựa chọn S3 như hình nhé
Ở hình trên bạn sẻ chú ý những trường sau
  • Origin Domain: Đây sẻ là nơi chúng ta lựa chọn bucket s3 của mình
  • Name: Tên cho Origin của Cloudfront mà ta sẻ tạo (mình thì đặt giống với tên S3 của mình luôn cho dễ phân biệt)
  • S3 bucket access: Đây sẻ là trường để chúng ta cấp quyền cho phép Cloudfront có thể truy cập S3 của chúng ta, thực hiện click "Create new OAI" nếu như bạn chưa có nhé và chọn "Yes, update the bucket policy"
Phần này thì các bạn cứ chọn như hình của mình nhé, giải thích sơ qua về Origin Shield đại loại nó sẻ tạo Cache CDN ưu tiên tại region mà chúng ta mong muốn
Còn lại thì cứ giữ nguyên và sau đó chọn Create để quá trình tạo diễn ra, sau khi tạo xong chúng ta sẻ có một vài thông tin như hình bên dưới
Như mục trên chúng ta đã có domain name của Cloudfront tự tạo ra và nó là một dãi số ID và domain cuối là cloudfront.net chúng ta sẻ thực hiện CNAME đến domain hiện tại trong Cloudflare để có thể kết hợp chúng với Cloudflare
Nhưng trước khi làm được điều đó thì các bạn phải customize domain trong mục "Alternate domain names" trước, vì nếu như bạn không settings Alternate domain names thì chắc chắn từ phía Cloudflare bạn không thể truy cập tới được, vậy để làm điều đó thì sau ? bắt buộc chúng ta phải có ACM viết tắt của "AWS Certificate Manager" chúng ta thực hiện truy cập vào đó và request SSL nhưng nên nhớ là phải đồ xịn nhé, chứ thằng Cloudfront này khó lắm bạn mà import Let's Encrypt hay gì đó cùi cùi vào là nó không chịu đâu hoặc bạn chơi trực tiếp luôn nghĩa là request SSL của Amazon luôn chứ không phải Import vậy thì chắc chắn 100% vượt qua được
Sau đó bạn sẻ thực hiện truy cập vào SSL mới request và tìm đến mục add CNAME, add chúng đến DNS Manager của mình để nó xác nhận
Như bạn thấy đấy chúng ta sẻ có mục CNAME name và CNAME value ứng với 2 trường trong DNS
thực hiện add vào để trạng thái Pending chuyển thành Success nghĩa là chúng ta có thể sử dụng SSL đó rồi đấy, của mình là mình đã add nó vào rồi nên status đã chuyển thành Success rồi, giờ thì cứ lấy nó qua Cloudfront và sử dụng thôi nào, truy cập General tab và ở mục Settings chọn Edit
Điền thông tin như hình, ở phần Alternate Domain chúng ta điền tên Domain mà chúng ta sẻ setting cho S3 đó, giống với tên Domain đã setting ở Cloudflare, giả sử ở trên Cloudflare mình đã set là s3.pharmacity.io nên thành ra ở phần đó mình cũng sẻ để y vậy, bây giờ các bạn có thể dùng lệnh để kiểm tra có cache hay chưa nhé, nếu như hiện MISS thì chưa cache nhưng nếu hiện HIT thì nghĩa là URL đã được cache
curl -I URL
Có một vấn đề mà mình quên nói với các bạn là, ở phần "Bucket policy" của s3 thì các bạn nên chừa lại mõi policy đến Cloudfront thôi nhé, để tránh các lỗi khác xảy ra
Sorry vì lý do bảo mật nên thành ra mình xin phép cắt bỏ những thông tin quan trọng trong hình, như vậy là xong rồi nhé, chúc các bạn thành công.

Post a Comment

0 Comments