Giới thiệu về Amazon S3
1. Amazon S3 là gì?
Nếu bạn có một website với những người đọc đến từ nhiều nơi trên thế giới chắc chắn bạn sẽ quan tâm tới dịch vụ CDN, nó giúp bạn phân phối nội dung nhanh hơn tới người đọc, góp phần nâng cao thứ hạng của website và vì vậy bạn sẽ có thêm nhiều người đọc hơn.
Amazon S3 mặc dù không phải làm một dịch vụ CDN nhưng nó là một phần quan trọng của Amazon Cloudfront, một dịch vụ CDN của Amazon hiện đang đứng đầu thế giới. Trong bài viết này tôi cố gắng chia sẽ các hiểu biết của tôi về Amazon S3, bao gồm cả chi phí mà bạn cần trả nếu sử dụng nó.
Amazon S3 và Cloudfront thật tuyệt vời, nó đã thuyết phục tôi mặc dù trước đó tôi đã sử dụng một dịch vụ CDN tốt khác là Cloudflare. Tôi tin rằng bài viết này có ích hơn nữa với bạn nếu bạn đang sử dụng WordPress, vì vậy đừng rời khỏi bài viết, tôi sẽ trả lời câu hỏi Amazon S3 là gì và giải thích các khái niệm liên quan tới nó.
OK, Amazon S3 là từ viết tắt của Amazon Simple Storage Service (Dịch vụ lưu trữ đơn giản của Amazon), nó giúp bạn lưu trữ các file trong một cấu trúc thư mục và bạn có thể truy cập vào các file này trong môi trường web.
Amazon S3 cung cấp các API để bạn tải lên, download và quản lý quyền (permission) đối với các file, bạn cũng có thể quản lý các file thông qua website quản trị sẵn có của Amazon S3.
Nghe có vẻ như Amazon S3 chẳng khác gì so với Google One hoặc DropBox. Về chi phí lưu trữ chúng tương đương nhau, khoảng $1/50GB/Month (Bảng giá năm 2021). Nhưng sau đây là các khác biệt:
Google One / DropBox
Nếu bạn cần một nơi lưu trữ các bộ phim, các file nhạc, hình ảnh, album.. hãy sử dụng Google One hoặc DropBox và không phải lo lắng về dung lượng dữ liệu mà người dùng download về, nó gần như không giới hạn. Chúng giống như một ổ cứng từ xa của bạn.
Amazon S3
Chi phí truyền tải dữ liệu từ Amazon S3 ra ngoài Internet là rất đắt, bạn phải trả khoảng 1 đô la để truyền tải 11.7GB dữ liệu (thật kinh khủng). Amazon S3 thường được sử dụng để lưu trữ các Website tĩnh, các dữ liệu tĩnh liên quan tới Website, và nó có thể hoạt động như một Website tĩnh với vài bước cấu hình đơn giản.
Làm ơn đừng đóng bài viết này hoặc vội vàng từ bỏ giải pháp Amazon S3 khi bạn nhìn thấy mức giá trên, tôi sẽ nói với bạn cách để giảm chi phí xuống hàng chục lần ở phía cuối của bài viết.
Điều quan trọng là một số Website động có thể chuyển đổi thành Website tĩnh để triển khai lên Amazon S3, chẳng hạn các website đang chạy trên WordPress, và bạn có thể nói lời tạm biệt với các VPS cồng kềnh.
Cuối cùng, Amazon S3 là một phần trong hệ sinh thái AWS (Amazon Web Services), nó dễ dàng tích hợp với các dịch vụ khác của Amazon.
2. S3 Bucket
S3 Bucket (Cái chậu S3) là một bộ chứa (container) cho các đối tượng được lưu trữ trong Amazon S3, có thể coi S3 Bucket tương ứng với một website.
3. S3 Object
Một đối tượng (Object) trong S3 Bucket thường là được hiểu là một file, mặc dù nó có ý nghĩa rộng hơn, cụ thể là dữ liệu của file và thông tin metadata của file đó.
Metadata (Siêu dữ liệu): Chứa các thông tin của file như Content-Type, thời điểm sửa đổi lần cuối,.. và các thông tin tuỳ biến do bạn cung cấp.
Có thể bạn đang nghĩ rằng tất cả các trang của một Website tĩnh đều có phần mở rộng là html, chẳng hạn:
- https://example.com/amazon-s3-tutorial.html
Suy nghĩ trên là một sai lầm. Thực tế trên S3 Bucket bạn có thể upload một file với tên là "amazon-s3-tutorial", và sét đặt Content-Type="text/html" và bạn có thể truy cập vào nó với một đường dẫn đẹp hơn:
- https://example.com/amazon-s3-tutorial
Bạn cũng có thể thêm thông tin vào Metadata của trang cũ để chuyển hướng vĩnh viễn nó tới trang mới, đây là một trong những tính năng tuyệt vời của Amazon S3.
4. S3 Regions
S3 Region: Là một khu vực địa lý lưu trữ dữ liệu một S3 Bucket của bạn, chẳng hạn:
US East (Ohio) | us-east-2 |
US East (N. Virginia) | us-east-1 |
US West (N. California) | us-west-1 |
US West (Oregon) | us-west-2 |
Africa (Cape Town) | af-south-1 |
Asia Pacific (Hong Kong) | ap-east-1 |
Asia Pacific (Mumbai) | ap-south-1 |
Asia Pacific (Osaka-Local) | ap-northeast-3 |
Asia Pacific (Seoul) | ap-northeast-2 |
Asia Pacific (Singapore) | ap-southeast-1 |
Asia Pacific (Sydney) | ap-southeast-2 |
Asia Pacific (Tokyo) | ap-northeast-1 |
Canada (Central) | ca-central-1 |
China (Beijing) | cn-north-1 |
China (Ningxia) | cn-northwest-1 |
Europe (Frankfurt) | eu-central-1 |
Europe (Ireland) | eu-west-1 |
Europe (London) | eu-west-2 |
Europe (Milan) | eu-south-1 |
Europe (Paris) | eu-west-3 |
Europe (Stockholm) | eu-north-1 |
Middle East (Bahrain) | me-south-1 |
South America (São Paulo) | sa-east-1 |
Việc chọn một khu vực địa lý để đặt S3 Bucket của bạn cũng khá quan trọng vì nó có liên quan tới giá dịch vụ mà bạn cần phải chi trả cho Amazon, tôi sẽ nói thêm về điều này ở phía dưới, nhưng về cơ bản đặt S3 Bucket của bạn tại Châu Âu hoặc Mỹ sẽ có chi phí thấp nhất.
5. S3 Keys
Mỗi đối tượng của S3 Bucket có một Key (khoá), nó là đường dẫn tới đối tượng. Ví dụ đối tượng main.js trong hình minh họa dưới đây có Key là:
- static/js/main.js
6. Còn chi phí thì sao?
Một điều quan trọng trước khi sử dụng một dịch vụ nào đó là ước lượng chi phí bạn cần phải trả. Bây giờ, giả sử rằng bạn đang đặt các S3 Bucket của bạn tại Mỹ hoặc Châu Âu nơi mà bạn nhận được giá dịch vụ rẻ nhất, với các khu vực khác sẽ có giá cao hơn một chút.
Về cơ bản bạn có thể tạo một hoặc nhiều S3 Bucket để lưu trữ các dữ liệu, số tiền bạn cần thanh toán dựa trên tổng dung lượng dữ liệu lưu trữ trên tất cả các S3 Bucket.
Bạn phải trả $0.023/1GB/Month, hay nói cách khác với 1 đô la một tháng bạn có thể lưu trữ 43GB dữ liệu trên các S3 Bucket. Nếu bạn sử dụng S3 Bucket để lưu trữ dữ liệu của 1 website thông thường thì rõ ràng chi phí là không đáng kể.
Ngoài ra bạn cũng phải chi trả chi phí khi sử dụng Rest API để đồng bộ dữ liệu từ máy tính của bạn lên S3 Bucket. Cụ thể, bạn tạo 1000 yêu cầu để upload 1000 file vào S3 Bucket bạn phải trả khoảng $0.005, nó không phụ thuộc vào kích thước file. Chi phí cho việc này không thực sự đáng kể.
1000 Requests | Price |
PUT, COPY, POST, LIST | $0.005 |
GET, SELECT | $0.0004 |
Điều tồi tệ nhất là chi phí truyền tải dữ liệu từ S3 Bucket (hoặc Cloudfront) ra Internet, nó đắt một cách không tưởng. 1 GB đầu tiên bạn được miễn phí, sau đó bạn phải trả khoảng $0.085/1GB, nghĩa là bạn phải trả 1 đô la chỉ để truyền tải 11.7GB dữ liệu.
Một trang sẽ bao gồm HTML và các dữ liệu tĩnh khác như Image, Css, Javascript,... có dung lượng trung bình khoảng 2MB, đôi khi là 5MB nếu website của bạn chứa nhiều hình ảnh.
OK. Giả sử rằng dung lượng mỗi trang là 2MB và mỗi người dùng xem 1 trang của bạn thì 11.7GB chỉ đủ phục vụ 5990 người (Và bạn phải thanh toán 1 đô la cho Amazon).
Nếu website của bạn mỗi ngày có 20.000 người truy cập bạn sẽ mất 3.3 đô la, và mỗi tháng bạn sẽ phải thanh toán 100 đô la.
Hãy so sánh nó với việc thuê một VPS:
- Thuê một VPS với giá $5/Month bạn có 25GB dung lượng lưu trữ và được miễn phí truyền tải 1000GB dữ liệu.
- Thuê một VPS với giá $20/Month bạn có 80GB dung lượng lưu trữ và được miễn phí truyền tải 4TB dữ liệu.
Quả thật sử dụng dịch vụ Amazon Cloudfront rất đắt, bạn có thể tham khảo chi tiết bảng giá theo liên kết dưới đây.
7. Làm sao để giảm chi phí sử dụng?
Như đã phân tích ở trên giá cả là một vấn đề của Amazon S3 / Cloudfront, vâng nó rất đắt, tôi đã nghe thấy mọi người la làng về điều này rất nhiều trên các diễn đàn. Amazon S3 là một phần quan trọng của Amazon Cloudfront, ở đầu bài viết tôi đã nói rằng tôi thích dịch vụ Cloudfront của Amazon hơn cả Cloudflare. Hãy từ từ đừng hét vào mặt tôi lúc này, bài viết dưới đây của tôi chỉ cho bạn cách giảm 50 lần chi phí truyền tải dữ liệu:
Các hướng dẫn Amazon Web Services
- Giới thiệu về Amazon Web Services (AWS)
- Giới thiệu về Amazon S3
- Giới thiệu về Amazon Cloudfront và kiến trúc của nó
- Làm sao để giảm chi phí Amazon Cloudfront?
- Vô hiệu hoá bộ nhớ đệm CloudFront
- Giới thiệu về DigitalOcean Spaces
- Hướng dẫn tạo DigitalOcean Spaces Bucket
- Giới thiệu về Amazon ACM
- Java Awssdk S3 Tải tệp lên S3 Bucket với S3Client
- Tạo AWS accessKeyId/secretAccessKey
- Java Awssdk S3 Liệt kê các đối tượng trong S3 Bucket
- Lưu trữ (host) một Website tĩnh trên Amazon S3
- Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
- Tạo DigitalOcean Spaces Access Key
- Java Awssdk Các Credentials Provider thông dụng
- Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
- Java Awssdk Tạo và sử dụng EnvironmentVariableCredentialsProvider
- Java Awssdk Tạo và sử dụng SystemPropertyCredentialsProvider
- Java Awssdk S3 Tải object lên với S3TransferManager
- Java Awssdk S3 Tải object xuống với S3TransferManager
- Java thao tác với DigitalOcean Spaces sử dụng S3TransferManager
- Java tạo, liệt kê và xoá S3 Bucket
- Aws Console Tạo tài khoản người dùng IAM
- Tạo một vùng chứa Amazon S3 (S3 Bucket)
- Các quy tắc chuyển hướng cho S3 Static Website
- Cấu hình tên miền tuỳ chỉnh cho website tĩnh Amazon S3
- Tạo bản phân phối CloudFront cho S3 Bucket
- Cấu hình các trang phản hồi lỗi cho CloudFront
- Tạo các chính sách S3 Bucket
- Công cụ tạo các chính sách cho AWS - policygen
- So sánh Amazon S3 Rest API Endpoint và S3 Web Endpoint
- Chuyển hướng trong S3 Website với x-amz-website-redirect-location
- Di chuyển (migrate) dịch vụ DNS tới Amazon Route 53
- Chuyển (transfer) đăng ký tên miền tới Amazon Route 53
- Yêu cầu chứng chỉ SSL từ Amazon ACM
Show More