メインコンテンツまでスキップ

Amazon Simple Storage Service (S3)

1. Amazon S3 là gì?

Amazon Simple Storage Service (Amazon S3) là dịch vụ lưu trữ đối tượng (object storage) phổ biến nhất thế giới, cung cấp khả năng mở rộng vô hạn, độ an toàn dữ liệu cao và chi phí tối ưu.

Hãy tưởng tượng S3 giống như một "Google Drive" nhưng dành cho lập trình viên và doanh nghiệp, nơi bạn có thể lưu trữ hàng tỷ file và truy cập chúng từ bất kỳ đâu thông qua API.

Các lợi ích chính

  • Độ bền cực cao (Durability): 99.999999999% (11 chữ số 9). Xác suất mất dữ liệu gần như bằng 0.
  • Khả năng mở rộng (Scalability): Tự động scale theo dung lượng lưu trữ, từ vài MB đến hàng ngàn TB.
  • Tính sẵn sàng (Availability): Cam kết SLA lên tới 99.99%.
  • Chi phí linh hoạt: Chỉ trả tiền cho những gì bạn sử dụng (pay-as-you-go).

2. Các khái niệm cốt lõi

  1. Bucket: tập hợp các object được lưu trữ trong Amazon S3. Cũng giống như thư mục trong hệ thống file

    • Container chứa objects.
    • Không giới hạn số object trong bucket.
    • Tên Bucket phải duy nhất trên toàn cầu (Globally Unique), nghĩa là không được trùng với bất kỳ bucket nào đã tồn tại trên toàn bộ hệ thống AWS, kể cả của các tài khoản AWS khác trên thế giới. Bạn không thể tạo bucket với tên đã được sử dụng bởi tài khoản khác, dù là ở Region nào.
    • Tên Bucket thường được dùng làm một phần của URL truy cập (VD: https://my-bucket.s3.amazonaws.com/...).
    • Mỗi bucket có thể kiểm soát truy cập như: Ai có thể tạo, xóa, xem các object trong bucket. Read/Write.
  2. Object: là khái niệm cơ bản về một thực thể dữ liệu được lưu trữ trong S3

    • Là các file (ảnh, video, log, backup...).
    • Kích thước tối đa cho 1 object là 5 TB.
    • Mỗi object gồm: Key (tên file), Value (dữ liệu), Version ID, Metadata.
    • Mỗi object có thể có nhiều phiên bản (Versioning).
  3. Region: Là khu vực vật lý nơi dữ liệu được lưu trữ

    • Chọn Region gần khách hàng nhất để giảm độ trễ, tối ưu chi phí và tuân thủ các quy định về lưu trữ dữ liệu (data residency).
    • Việc chọn Region phù hợp giúp đảm bảo dữ liệu tuân thủ luật pháp địa phương (ví dụ: GDPR ở Châu Âu, PDPA ở Singapore), đồng thời tối ưu hiệu năng truy cập cho người dùng cuối.
    • Mỗi tài khoản AWS có thể sử dụng tất cả các Region mà AWS cung cấp trên toàn cầu, không giới hạn số lượng Region.
    • Mỗi tài khoản AWS có thể có tối đa 100 bucket trên toàn bộ các Region (global), không phải mỗi Region. Đây là giới hạn mềm và có thể tăng lên bằng cách yêu cầu AWS Support.
  4. Key: Là tên của object trong S3

    • Mỗi object trong S3 đều có một Key (tên file).
    • Key phải duy nhất trong bucket.
    • Key có thể chứa các ký tự đặc biệt nhưng có độ dài tối đa là 1,024 byte (tính theo byte, không phải ký tự). Nếu vượt quá giới hạn này, bạn sẽ không thể lưu object lên S3.
  5. Version ID: Là phiên bản của object trong S3

    • Object chỉ có Version ID khi bucket đã bật tính năng versioning (ID phiên bản).
    • Version ID là duy nhất trong phạm vi một bucket (unique within a bucket).
    • Version ID không thể thay đổi.
  6. Metadata: Là các cặp key-value bổ sung gắn với object trong S3

    • Metadata bao gồm các thông tin hệ thống như: Content-Type (loại file), Content-Length (kích thước), thời gian tạo, thời gian cập nhật, v.v. Ngoài ra, bạn có thể thêm metadata do người dùng định nghĩa (user-defined metadata) với các cặp key-value tùy ý.
    • Metadata không ảnh hưởng đến nội dung của object. Lưu ý: "tên file" (Key) không phải là metadata mà là thuộc tính riêng của object.

3. S3 Versioning

S3 Versioning là tính năng quan trọng cho phép lưu trữ nhiều biến thể của một object trong cùng một bucket. Nói một cách dễ hiểu, S3 sẽ "ghi nhớ" lịch sử thay đổi của file. Tính năng này giúp bảo lưu, truy xuất và khôi phục mọi phiên bản của mọi object.

Tại sao tính năng này lại QUAN TRỌNG? Trong thực tế vận hành, sai sót là điều không thể tránh khỏi. Versioning đóng vai trò như một "chiếc phao cứu sinh" cho dữ liệu, giúp ngăn chặn mất mát dữ liệu do sai sót của người dùng hoặc lỗi ứng dụng:

  1. Phòng việc xóa nhầm: Nếu ai đó vô tình xóa nhầm, hoặc chạy script dọn dẹp sai logic xóa mất dữ liệu quan trọng? Với Versioning, file không mất đi vĩnh viễn mà chỉ bị đánh dấu là "đã xóa". Ta hoàn toàn có thể khôi phục lại nó nhanh chóng.
  2. Khôi phục khi bị ghi đè: Nếu một ứng dụng bị lỗi và ghi đè dữ liệu rác lên file quan trọng, hoặc ta upload nhầm một file mới đè lên file cũ? Versioning cho phép ta roll back để lấy lại phiên bản đúng trước đó một cách dễ dàng.

Tip: Hãy luôn cân nhắc bật Versioning cho các bucket chứa dữ liệu quan trọng.

  • Khi bật Versioning: S3 sẽ giữ lại tất cả các phiên bản của một object. Nếu upload đè file report.pdf, S3 sẽ không xóa file cũ mà lưu file mới với Version ID mới.
  • Xóa Object: Nếu xóa một file khi đang bật Versioning, S3 chỉ chèn một Delete Marker (dấu đánh dấu đã xóa) để ẩn file đó đi. Ta có thể khôi phục lại bất cứ lúc nào bằng cách xóa Delete Marker hoặc restore version cũ.
Lưu ý về chi phí

Khi bật Versioning, ta sẽ trả phí lưu trữ cho tất cả các phiên bản. Hãy cấu hình Lifecycle Policy để tự động xóa các version cũ không cần thiết sau một khoảng thời gian.


4. S3 Storage Classes

S3 Storage Classes Là các lớp lưu trữ khác nhau được AWS cung cấp cho từng object. Mỗi lớp được thiết kế để tối ưu hóa chi phí dựa trên tần suất truy cập và thời gian lưu trữ của dữ liệu.

Chọn đúng lớp lưu trữ giúp tiết kiệm tới 90% chi phí.

Storage ClassUse Case (Trường hợp sử dụng)Đặc điểm
S3 StandardDữ liệu truy cập thường xuyên (Hot data).Độ trễ thấp (milliseconds), đắt nhất.
S3 Intelligent-TieringDữ liệu không rõ tần suất truy cập.Khuyên dùng. Tự động di chuyển data giữa các tier để tối ưu chi phí. Không có phí retrieval.
S3 Standard-IADữ liệu ít truy cập (Infrequent Access) nhưng cần gọi là có ngay (Backup hàng ngày).Phí lưu trữ rẻ hơn Standard, nhưng có phí lấy dữ liệu (retrieval fee).
S3 One Zone-IADữ liệu ít truy cập, không quan trọng (Non-critical).Lưu trữ dữ liệu dư thừa trong một AZ duy nhất (có nguy cơ mất dữ liệu nếu toàn bộ AZ bị mất vĩnh viễn, trường hợp này cực kỳ hiếm). Rẻ hơn IA 20%.
S3 Glacier Instant RetrievalArchive nhưng cần lấy ngay (Medical image).Rẻ, thời gian lấy dữ liệu milliseconds.
S3 Glacier Flexible RetrievalBackup/Archive lâu dài.Rất rẻ. Thời gian lấy dữ liệu: vài phút đến 12 giờ.
S3 Glacier Deep ArchiveLưu trữ bắt buộc theo luật (Audit log 7 năm).Rẻ nhất. Thời gian lấy dữ liệu: 12-48 giờ.

5. Security & Encryption

Access Control (Kiểm soát truy cập)

  1. Bucket Policies: JSON policy áp dụng cho toàn bộ bucket. (VD: "Cho phép user A đọc tất cả file", "Cấm IP X truy cập").
  2. Access Control Lists (ACLs): Legacy (ít dùng), phân quyền cho từng object cụ thể.
  3. IAM Policies: Phân quyền cho User/Role được làm gì trên S3.

Encryption (Mã hóa)

S3 hỗ trợ mã hóa dữ liệu khi truyền tải (In-transit) dùng SSL/TLS và mã hóa khi lưu trữ (At-rest).

  • SSE-S3: Mã hóa bằng key do S3 quản lý (AES-256). Tiện lợi, không tính thêm phí mã hóa (chỉ tính phí lưu trữ S3).
  • SSE-KMS: Mã hóa bằng key trong dịch vụ AWS KMS. An toàn hơn, kiểm soát được ai dùng key, có audit log.
  • SSE-C: Mã hóa bằng key do khách hàng tự giữ (Customer-provided key).

6. S3 Replication

Tự động sao chép object từ bucket này sang bucket khác (cùng hoặc khác region).

  • Cross-Region Replication (CRR): Sao chép sang Region khác. Dùng cho Disaster Recovery (DR) hoặc giảm latency cho user ở châu lục khác.
  • Same-Region Replication (SRR): Sao chép trong cùng Region. Dùng để tổng hợp log từ nhiều bucket về 1 bucket trung tâm hoặc sync môi trường Dev/Test.

7. Static Website Hosting

Bạn có thể dùng S3 để host một website tĩnh (HTML, CSS, JS, Images) với chi phí cực rẻ mà không cần máy chủ (serverless).

  1. Upload file index.html.
  2. Bật tính năng "Static website hosting" trong Properties.
  3. Tắt "Block Public Access" và thêm Bucket Policy cho phép public read.
  4. Bạn sẽ nhận được một Endpoint URL (VD: http://my-bucket.s3-website-us-east-1.amazonaws.com).

8. Consistency Model

  • Strong Consistency: Khi bạn PUT một object mới hoặc ghi đè (overwrite), bất kỳ lệnh GET nào ngay sau đó sẽ luôn trả về dữ liệu mới nhất. Không còn tình trạng "up xong chưa thấy file đâu" như các hệ thống eventual consistency cũ.

9. Performance & Pricing (Hiệu năng & Giá cả)

Performance

  • Multipart Upload: S3 hỗ trợ đối tượng (object) lên tới 5TB, nhưng với đối tượng lớn hơn 5GB, bạn bắt buộc phải dùng Multipart Upload. Với file lớn hơn 100MB, khuyến nghị sử dụng Multipart Upload để tăng tốc độ và giảm rủi ro lỗi mạng. Multipart Upload cho phép chia nhỏ file để upload song song.
  • S3 Transfer Acceleration: Tăng tốc upload đường dài dùng mạng CloudFront Edge Location (tốn thêm phí).

Pricing Model

Bạn trả tiền cho 3 thứ chính:

  1. Storage: Tính theo GB/tháng (giá thay đổi tùy theo loại storage, thời gian và khu vực; hãy tham khảo trang AWS S3 Pricing để biết thông tin mới nhất).
  2. Requests: Số lượng request GET, PUT, COPY...
  3. Data Transfer:
    • Ingress (Upload vào S3): Miễn phí.
    • Egress (Download ra Internet): Tính tiền.
    • Transfer giữa S3 và EC2 cùng Region: Miễn phí.

10. Common Use Cases

  1. Backup and Storage: Dùng S3 cho backup database, lưu file người dùng.
  2. Static Website Hosting: Host React/Vue/Angular app với chi phí thấp (kết hợp với CloudFront + Route53).
  3. Data Lakes: Lưu trữ dữ liệu thô (raw data) cho Big Data analytics (Athena, Redshift, EMR).
  4. Application Hosting: Lưu trữ media assets (ảnh, video) cho ứng dụng mobile/web để giảm tải cho web server.