Quay lại

Hướng Dẫn Chi Tiết Sử Dụng CloudFront Kết Hợp Với S3 Chuyên mục Devops    2024-10-21    6 Lượt xem    5 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

CloudFront S3 là hai dịch vụ mạnh mẽ của AWS, giúp tối ưu hóa việc lưu trữ và phân phối nội dung trên internet. Khi kết hợp chúng lại với nhau, bạn sẽ có được một hệ thống phân phối nội dung (CDN) mạnh mẽ, giúp tăng tốc độ tải trang web, giảm tải cho server và cải thiện trải nghiệm người dùng toàn cầu. Bài viết này sẽ hướng dẫn chi tiết cách cấu hình và sử dụng CloudFront với S3 một cách dễ hiểu.

1. Tổng quan về Amazon S3 và CloudFront

Amazon S3 (Simple Storage Service)

Amazon S3 là dịch vụ lưu trữ đối tượng của AWS, cho phép bạn lưu trữ và truy xuất dữ liệu từ bất kỳ đâu, vào bất kỳ thời điểm nào. Nó thường được dùng để lưu trữ các tài nguyên tĩnh như:

  • Hình ảnh
  • Video
  • CSS, JavaScript
  • Tài liệu

Amazon CloudFront

CloudFront là dịch vụ phân phối nội dung (CDN) của AWS, giúp đưa nội dung đến người dùng một cách nhanh chóng bằng cách cache nội dung tại nhiều điểm phân phối (Edge Locations) trên toàn cầu. Điều này làm giảm thời gian tải và cải thiện trải nghiệm cho người dùng cuối, đặc biệt là khi họ truy cập từ các vị trí cách xa máy chủ gốc.

2. Cách hoạt động của CloudFront và S3

Khi bạn kết hợp CloudFront và S3, CloudFront sẽ đóng vai trò làm mặt trước (front) phân phối nội dung, trong khi S3 là nơi lưu trữ gốc (origin) của các tệp tĩnh.

  • Người dùng yêu cầu nội dung (hình ảnh, video, file CSS, JS,...) thông qua CloudFront.
  • Nếu nội dung đã được cache tại điểm phân phối (Edge Location) gần nhất, CloudFront sẽ trả về nội dung này ngay lập tức.
  • Nếu nội dung chưa có trong cache, CloudFront sẽ yêu cầu nội dung từ S3, sau đó cache nó tại Edge Location và trả về cho người dùng.

Điều này giúp:

  • Tăng tốc độ tải trang vì nội dung được phân phối từ vị trí gần nhất với người dùng.
  • Giảm tải cho S3 và tiết kiệm chi phí bằng cách giảm số lượng yêu cầu trực tiếp tới S3.

3. Cách thiết lập CloudFront với S3

Bước 1: Tạo bucket trên S3

Trước tiên, bạn cần một bucket để lưu trữ các tệp tĩnh của mình. Dưới đây là các bước đơn giản để tạo một bucket S3:

  1. Truy cập vào S3 Console.
  2. Chọn Create bucket.
  3. Đặt tên bucket (ví dụ: my-website-bucket).
  4. Chọn khu vực (Region) phù hợp.
  5. Để các cấu hình mặc định khác và nhấn Create bucket.

Bước 2: Upload file lên S3

Bạn có thể upload các tệp tĩnh như hình ảnh, video, CSS, JS lên bucket đã tạo.

  1. Truy cập bucket của bạn.
  2. Chọn Upload và thêm các tệp bạn muốn lưu trữ.
  3. Hoàn tất quá trình upload.

Bước 3: Tạo CloudFront Distribution

CloudFront distribution sẽ lấy nội dung từ S3 và phân phối chúng.

  1. Truy cập vào CloudFront Console.
  2. Chọn Create Distribution.
  3. Chọn Web cho loại distribution.
  4. Trong phần Origin Settings:
    • Origin Domain Name, chọn bucket S3 mà bạn đã tạo.
    • Origin Path, nếu bạn muốn phân phối một thư mục cụ thể trong bucket, hãy chỉ định đường dẫn thư mục (ví dụ: /images).
  5. Cấu hình Cache Behavior Settings:
    • Viewer Protocol Policy: Chọn Redirect HTTP to HTTPS để đảm bảo mọi yêu cầu đều qua HTTPS.
    • Allowed HTTP Methods: Chọn GET, HEAD nếu bạn chỉ phân phối nội dung tĩnh.
  6. Cấu hình Distribution Settings:
    • Price Class: Chọn mức giá phù hợp với yêu cầu của bạn (ví dụ: chỉ sử dụng Edge Locations tại Mỹ và Châu Âu hoặc toàn cầu).
  7. Nhấn Create Distribution.

Sau khi tạo, CloudFront sẽ cung cấp một URL dạng https://dxxx.cloudfront.net để truy cập vào nội dung.

Bước 4: Cấu hình quyền truy cập cho S3 bucket

Để đảm bảo rằng CloudFront có thể truy cập được nội dung trong S3 nhưng người dùng không thể truy cập trực tiếp, bạn cần thực hiện các bước sau:

  1. Vào S3 Console và chọn bucket của bạn.
  2. Chọn Permissions > Bucket Policy.
  3. Thêm chính sách sau để cho phép CloudFront truy cập vào S3:
{
   "Version":"2012-10-17",
   "Statement":[{
      "Effect":"Allow",
      "Principal":{
         "AWS":"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [OAI ID]"
      },
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::your-bucket-name/*"
   }]
}
  • Thay thế [OAI ID] bằng Origin Access Identity (OAI) của bạn (có thể lấy từ phần Origin Settings khi cấu hình CloudFront).
  • Thay thế your-bucket-name bằng tên bucket của bạn.

4. Các thành phần hay sử dụng trong CloudFront

  • Origin: Là nơi chứa nội dung mà CloudFront sẽ phân phối. Có thể là S3, hoặc một máy chủ web khác.
  • Distribution: Là cấu trúc đại diện cho các thiết lập của CloudFront để phân phối nội dung.
  • Cache Behavior: Xác định cách CloudFront xử lý yêu cầu. Bạn có thể tạo nhiều cache behavior để phân phối nội dung khác nhau từ các đường dẫn khác nhau.
  • Edge Locations: Là các điểm phân phối nội dung của CloudFront trên toàn cầu.
  • Invalidation: Cho phép xóa nội dung đã cache khi bạn cập nhật các tệp trên S3.
  • TTL (Time-to-Live): Là khoảng thời gian CloudFront sẽ cache nội dung trước khi kiểm tra lại từ S3.

5. Lưu ý và mẹo khi sử dụng CloudFront với S3

  • Sử dụng OAI (Origin Access Identity): Đảm bảo rằng chỉ CloudFront mới có quyền truy cập vào các tệp S3 của bạn, giúp bảo mật nội dung và tránh truy cập trực tiếp.
  • Giảm chi phí bằng cách tối ưu cache: Cấu hình thời gian TTL phù hợp để nội dung được cache lâu hơn tại các edge location, giảm số lượng yêu cầu tới S3.
  • Invalidation thông minh: Chỉ sử dụng Invalidation khi thật sự cần thiết (khi nội dung đã cache cần cập nhật), vì mỗi lần Invalidation có thể tính phí nếu quá nhiều.
  • Theo dõi hiệu suất: Sử dụng CloudFront Reports để theo dõi hiệu suất và chi phí liên quan đến phân phối nội dung.

6. Kết luận

Việc sử dụng CloudFront kết hợp với S3 giúp tối ưu hóa việc phân phối nội dung, tăng tốc độ tải trang web và giảm tải cho server gốc. Với các bước hướng dẫn chi tiết ở trên, bạn có thể dễ dàng thiết lập hệ thống CDN mạnh mẽ cho ứng dụng của mình. Không chỉ vậy, việc áp dụng các thành phần như OAI và tối ưu TTL sẽ giúp bạn kiểm soát tốt hơn về bảo mật và chi phí.

Nếu bạn đang xây dựng một hệ thống web cần phân phối nội dung tĩnh cho người dùng trên toàn thế giới, CloudFront và S3 chắc chắn là một sự kết hợp đáng để bạn đầu tư!

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