Mục tiêu bài học
Nắm object storage, bucket policy, versioning và chọn storage class theo access pattern.
Bài giảng chi tiết
Bài toán thực tế
Một team cần lưu ảnh upload, giữ lại phiên bản khi người dùng ghi đè nhầm và tự chuyển object cũ sang archive. Họ đang định dùng EBS vì “có disk”; bài học buộc chọn object storage dựa trên access pattern và lifecycle.
Đừng học nội dung này như một danh sách tên dịch vụ. Hãy đi theo chuỗi: requirement → khái niệm → quyết định → bằng chứng. Một câu trả lời tốt phải nói được vì sao lựa chọn phù hợp, phương án gần nhất bị loại ở đâu, và kiểm tra nào chứng minh lựa chọn đó hoạt động.
Khái niệm được giải thích theo scenario
- S3 lưu object bằng key/metadata trong bucket; không phải block disk hay file system POSIX.
- Durability nói về khả năng không mất dữ liệu; availability nói về khả năng truy cập.
- Versioning hỗ trợ phục hồi overwrite/delete nhầm nhưng không thay backup/retention strategy.
- Block Public Access, bucket policy, IAM và lifecycle phải được xem cùng nhau; mặc định nên private.
Ví dụ khi gặp một scenario mới, hãy thay các từ khóa trong đề bằng một hệ thống cụ thể: ai là người dùng, dữ liệu đi qua đâu, thành phần nào có thể lỗi, quyền nào cần có và điều gì phải được quan sát. Cách làm này giúp phân biệt các đáp án gần đúng thay vì chọn theo trí nhớ tên service.
flowchart LR
A[Scenario / requirement] --> B[Concept and boundary]
B --> C[Service or control choice]
C --> D[Evidence and trade-off]
D --> E[Failure variant]
Khái niệm cốt lõi
S3 lưu object gồm dữ liệu, key và metadata trong bucket. Bucket name có tính toàn cầu và bucket có Region. Standard phù hợp truy cập thường xuyên; Standard-IA cho dữ liệu ít truy cập nhưng cần truy xuất nhanh; Glacier classes cho archive. Versioning hỗ trợ phục hồi object bị ghi đè/xóa nhưng không thay thế backup.
Ví dụ giảng viên: phân loại một quyết định cloud
Một thiết kế S3 phải bắt đầu từ object lifecycle và access pattern, không phải từ câu “S3 durable”. Hãy hỏi: object private hay public qua CDN, ai đọc/ghi, có cần version, giữ bao lâu, có dữ liệu nhạy cảm không, truy cập thường xuyên hay archive, và xóa nhầm khôi phục thế nào?
Ví dụ ảnh upload: client không nên nhận quyền bucket rộng; app cấp presigned URL giới hạn thời gian, bucket bật Block Public Access, object mã hóa và lifecycle chuyển ảnh cũ sang class phù hợp. Nếu người dùng xóa nhầm, versioning có thể giúp khôi phục object version; nó không tự bảo vệ khỏi credential bị đánh cắp, không thay thế policy review và cũng không làm mọi storage class miễn phí.
Failure drill: bucket public ngoài ý muốn, versioning chưa bật, lifecycle chuyển object quá sớm, hoặc app có quyền s3:*. Với mỗi lỗi, kiểm tra đúng control bằng get-public-access-block, get-bucket-versioning, get-bucket-lifecycle-configuration và policy review; không “fix” bằng cách xóa bucket khi chưa hiểu dữ liệu.
Thực hành có kiểm soát
Với bucket lab, kiểm tra Region, Block Public Access, versioning và lifecycle. Dùng aws s3api list-buckets hoặc get-bucket-versioning ở chế độ read-only. Chỉ tạo bucket khi đã biết cách xóa object và kiểm tra chi phí.
Expected state và recovery
Trước khi thực hành, ghi rõ target/account/region, trạng thái hiện tại và output mong đợi. Sau thao tác, kiểm chứng bằng trạng thái thực tế hoặc command phù hợp; nếu kết quả sai, giữ lại evidence, quay về thay đổi nhỏ nhất và cleanup đúng owner. Không coi exit code 0 hoặc thông báo “success” là bằng chứng duy nhất.
- Đọc được Region và trạng thái versioning của bucket.
- Giải thích vì sao object bị xóa vẫn có thể khôi phục khi versioning phù hợp.
- Phân biệt durability với availability bằng scenario riêng.
- Kiểm tra bucket không public và nêu bước cleanup object/version trước khi xóa.
Bẫy đề thi và cách tự kiểm tra
Durability là khả năng không mất dữ liệu; availability là khả năng truy cập. S3 không phải file system gắn vào EC2. Thiết kế mặc định nên private; bucket policy và Block Public Access phải được xem cùng nhau.