Bỏ qua để đến nội dung

Amazon S3 – Tính năng nâng cao

Ở chương S3 cơ bản bạn đã biết S3 có nhiều storage class (hạng lưu trữ) với mức giá và độ sẵn sàng khác nhau. Điều quan trọng tiếp theo là: một object không cần nằm mãi ở một hạng. Bạn có thể transition (chuyển) object từ hạng này sang hạng khác theo thời gian, vì dữ liệu thường “nguội dần” — file log của tháng này được đọc liên tục, còn file log của hai năm trước thì gần như không ai mở nữa.

Nguyên tắc chọn đích khi chuyển:

  • Object ít được truy cập (infrequently accessed) → chuyển sang Standard IA.
  • Object dạng archive (lưu trữ lâu dài) mà bạn không cần lấy ra nhanh → chuyển sang Glacier hoặc Glacier Deep Archive.

Các hạng có thể tham gia vào luồng chuyển đổi này gồm: Standard, Standard IA, Intelligent Tiering, One-Zone IA, Glacier Instant Retrieval, Glacier Flexible Retrieval, Glacier Deep Archive.

Bạn hoàn toàn có thể gọi API để chuyển từng object bằng tay, nhưng cách làm thực tế là tự động hóa bằng Lifecycle Rules — để S3 tự làm theo tuổi của object.

Lifecycle Rules (quy tắc vòng đời) là cách bạn khai báo cho S3 biết: object trong bucket này, sau bao nhiêu ngày thì làm gì. Thay vì viết một cron job đi quét bucket rồi gọi API, bạn chỉ khai báo luật một lần và S3 thi hành.

Một Lifecycle Rule có hai loại hành động:

  • Transition Actions – cấu hình để object chuyển sang một storage class khác.
    • Ví dụ: chuyển object sang Standard IA 60 ngày sau khi tạo.
    • Ví dụ: chuyển sang Glacier để archive sau 6 tháng.
  • Expiration Actions – cấu hình để object hết hạn (bị xóa) sau một khoảng thời gian.
    • Ví dụ: file access log có thể đặt xóa sau 365 ngày.
    • Dùng để xóa các version cũ của file (nếu đã bật versioning).
    • Dùng để xóa các incomplete Multi-Part upload (phần upload dở dang không hoàn tất).

Rule không nhất thiết phải áp cho cả bucket. Bạn có thể giới hạn phạm vi:

  • Theo prefix, ví dụ s3://mybucket/mp3/*.
  • Theo tag của object, ví dụ Department: Finance.

Câu hỏi khó nhất khi viết Lifecycle Rule là: nên chuyển sau bao nhiêu ngày? Đặt 30 ngày thì có khi vẫn còn người đọc, đặt 180 ngày thì trả tiền Standard quá lâu. S3 Analytics – Storage Class Analysis trả lời câu hỏi đó bằng số liệu truy cập thật của bucket.

  • Giúp bạn quyết định khi nào nên chuyển object sang storage class phù hợp.
  • Đưa ra khuyến nghị cho StandardStandard IA.
  • KHÔNG hoạt động cho One-Zone IA hay Glacier.
  • Báo cáo được cập nhật hằng ngày, dưới dạng file .csv với các cột kiểu Date, StorageClass, ObjectAge.
  • Cần 24 đến 48 giờ mới bắt đầu thấy dữ liệu phân tích.

Đây là bước đầu tiên rất tốt để dựng Lifecycle Rules (hoặc để cải thiện các rule đang có) — bạn xem báo cáo rồi mới chọn mốc ngày, thay vì đoán.

Mặc định, chủ bucket (bucket owner) trả toàn bộ chi phí lưu trữ và chi phí truyền dữ liệu của bucket đó. Điều này rất bất lợi khi bạn muốn chia sẻ một tập dữ liệu lớn cho các AWS account khác tải về — họ tải càng nhiều, bạn càng trả nhiều tiền network.

Requester Pays đảo ngược phần chi phí đó:

  • Với bucket bật Requester Pays, người gửi request (requester) — chứ không phải chủ bucket — trả chi phí request và chi phí download dữ liệu từ bucket.
  • Chủ bucket vẫn trả chi phí storage.
  • Rất hữu ích khi bạn muốn chia sẻ dataset lớn với các account khác.
  • Requester phải được xác thực trong AWS — không thể là request ẩn danh (anonymous).

Nhiều kiến trúc cần phản ứng ngay khi có gì đó xảy ra trong bucket: ảnh vừa upload thì phải tạo thumbnail, file vừa xóa thì phải cập nhật database. S3 Event Notifications cho phép S3 tự đẩy sự kiện tới nơi xử lý mà bạn không phải đi hỏi (“poll”) bucket liên tục.

  • Các loại event: S3:ObjectCreated, S3:ObjectRemoved, S3:ObjectRestore, S3:Replication
  • Có thể lọc theo tên object, ví dụ chỉ bắt các file *.jpg.
  • Use case kinh điển: tạo thumbnail cho ảnh được upload lên S3.
  • Có thể tạo bao nhiêu “S3 event” cũng được.
  • Event thường được gửi trong vài giây, nhưng đôi khi có thể mất một phút hoặc lâu hơn.

Ba đích nhận trực tiếp là Lambda Function, SQSSNS. Điểm cần chú ý về quyền: bạn không cấp quyền bằng IAM Role gắn cho S3, mà bằng resource policy của chính đích đến — Lambda Resource Policy, SNS Resource (Access) Policy, SQS Resource (Access) Policy — cho phép S3 được ghi vào đó.

Ngoài ba đích trên, bucket có thể gửi toàn bộ event sang Amazon EventBridge, rồi EventBridge dùng rules để phân phối tiếp. Cách này mở ra nhiều khả năng hơn:

  • Lọc nâng cao bằng JSON rules (theo metadata, kích thước object, tên…).
  • Nhiều đích đến — ví dụ Step Functions, Kinesis Data Streams / Firehose… tổng cộng hơn 18 dịch vụ AWS có thể làm destination.
  • Các năng lực riêng của EventBridge: Archive, Replay Events, Reliable delivery (gửi tin cậy).

S3 tự động scale để chịu được tốc độ request cao, với độ trễ khoảng 100–200 ms. Giới hạn thông lượng của S3 được tính theo prefix, không phải theo bucket — đây là chi tiết rất hay bị hiểu sai.

  • Ứng dụng của bạn đạt được ít nhất 3.500 request PUT/COPY/POST/DELETE mỗi giây, hoặc 5.500 request GET/HEAD mỗi giây, trên mỗi prefix trong một bucket.
  • Không có giới hạn về số lượng prefix trong một bucket.

Prefix chính là phần đường dẫn nằm giữa tên bucket và tên file:

bucket/folder1/sub1/file => prefix /folder1/sub1/
bucket/folder1/sub2/file => prefix /folder1/sub2/
bucket/1/file => prefix /1/
bucket/2/file => prefix /2/

Nếu bạn chia đều lượng đọc ra cả bốn prefix trên, tổng thông lượng đạt được là 22.000 request/giây cho GETHEAD (4 × 5.500).

Thay vì đẩy một file khổng lồ trong một request duy nhất, Multi-Part upload chia file thành nhiều part và upload song song.

  • Khuyến nghị dùng cho file lớn hơn 100 MB.
  • Bắt buộc phải dùng cho file lớn hơn 5 GB.
  • Giúp song song hóa việc upload, tức là tăng tốc truyền tải.

Vấn đề khác: người upload ở Australia mà bucket nằm ở USA thì đường đi qua Internet công cộng rất chậm. S3 Transfer Acceleration giải quyết bằng cách cho file đi vào edge location gần nhất, rồi edge location chuyển tiếp dữ liệu tới bucket ở region đích qua mạng nội bộ của AWS (nhanh và ổn định hơn Internet công cộng).

  • Tăng tốc độ truyền bằng cách gửi file tới một AWS edge location, nơi này forward dữ liệu tới S3 bucket ở region đích.
  • Tương thích với Multi-Part upload — dùng được cả hai cùng lúc.

Với việc tải xuống, bạn có thể song song hóa các lệnh GET bằng cách yêu cầu từng khoảng byte (byte range) cụ thể của file.

  • Song song hóa GET bằng cách yêu cầu các byte range khác nhau (Part 1, Part 2, … Part N) cùng lúc → tăng tốc download.
  • Chịu lỗi tốt hơn: nếu một range lỗi, chỉ cần tải lại đúng range đó.
  • Cũng dùng để lấy một phần dữ liệu thôi — ví dụ chỉ lấy header (XX byte đầu tiên) của file mà không tải toàn bộ.

Khi cần tác động lên hàng triệu object đã có sẵn — ví dụ mã hóa lại toàn bộ object chưa được mã hóa — viết script tự chạy vòng lặp là việc rất dễ sai và rất khó theo dõi. S3 Batch Operations làm việc đó với một request duy nhất.

Các thao tác hàng loạt có thể thực hiện:

  • Sửa metadata & properties của object.
  • Copy object giữa các S3 bucket.
  • Mã hóa các object chưa được mã hóa.
  • Sửa ACL, tag.
  • Restore object từ S3 Glacier.
  • Gọi một Lambda function để thực hiện hành động tùy ý trên từng object.

Cách hoạt động: một job gồm ba phần — danh sách object, hành động cần làm, và các tham số tùy chọn. S3 Batch Operations lo phần vất vả còn lại: quản lý retry, theo dõi tiến độ, gửi thông báo khi hoàn tất, sinh báo cáo

Để có danh sách object đầu vào, bạn có thể dùng S3 Inventory (sinh ra Objects List Report), rồi dùng Athena để query và lọc ra đúng tập object cần xử lý trước khi đưa vào job.

Lifecycle Rules và Analytics làm việc ở phạm vi một bucket. Khi bạn có hàng chục account và hàng trăm bucket trong một AWS Organization, bạn cần một góc nhìn tổng thể — đó là S3 Storage Lens.

  • Hiểu, phân tích và tối ưu việc lưu trữ trên toàn bộ AWS Organization.
  • Phát hiện bất thường (anomaly), chỉ ra chỗ tiết kiệm chi phí, và áp dụng best practice về bảo vệ dữ liệu trên toàn Organization — với 30 ngày metric về usage & activity.
  • Tổng hợp (aggregate) dữ liệu theo Organization, theo account cụ thể, theo region, theo bucket, hoặc theo prefix.
  • dashboard mặc định, hoặc bạn tự tạo dashboard riêng.
  • Có thể cấu hình export metric hằng ngày ra một S3 bucket, định dạng CSV hoặc Parquet.
  • Trực quan hóa các insight và xu hướng đã tổng hợp, cho cả metric miễn phí và metric nâng cao.
  • Hiển thị dữ liệu Multi-Region và Multi-Account.
  • Được Amazon S3 cấu hình sẵn.
  • Không thể xóa, nhưng có thể disable.
Nhóm metric Ví dụ metric Dùng để làm gì
Summary StorageBytes, ObjectCount Tìm bucket/prefix tăng nhanh nhất, hoặc không còn được dùng
Cost-Optimization NonCurrentVersionStorageBytes, IncompleteMultipartUploadStorageBytes Tìm bucket có multipart upload dở dang quá 7 ngày; tìm object nên chuyển xuống storage class rẻ hơn
Data-Protection VersioningEnabledBucketCount, MFADeleteEnabledBucketCount, SSEKMSEnabledBucketCount, CrossRegionReplicationRuleCount Tìm bucket chưa tuân thủ best practice bảo vệ dữ liệu
Access-management ObjectOwnershipBucketOwnerEnforcedBucketCount Xem các bucket đang dùng thiết lập S3 Object Ownership nào
Event EventNotificationEnabledBucketCount Xem bucket nào đã cấu hình S3 Event Notifications
Performance TransferAccelerationEnabledBucketCount Xem bucket nào đã bật S3 Transfer Acceleration
Activity AllRequests, GetRequests, PutRequests, ListRequests, BytesDownloaded Hiểu storage đang được request như thế nào
Detailed Status Code 200OKStatusCount, 403ForbiddenErrorCount, 404NotFoundErrorCount Phân tích các HTTP status code trả về
Free Metrics Advanced Metrics and Recommendations
Có sẵn Tự động cho mọi khách hàng Metric & tính năng trả phí thêm
Nội dung Khoảng 28 usage metric Advanced Metrics – Activity, Advanced Cost Optimization, Advanced Data Protection, Status Code
Tính năng thêm CloudWatch Publishing (xem metric trong CloudWatch, không tính phí thêm); Prefix Aggregation (thu metric ở mức prefix)
Thời gian query được 14 ngày 15 tháng
Chủ đề Phải nhớ
Lifecycle Rules Transition (đổi storage class) + Expiration (xóa); áp theo prefix hoặc tag; xóa được version cũ và multipart upload dở dang
S3 Analytics Khuyến nghị chuyển hạng, chỉ cho Standard / Standard IA; báo cáo hằng ngày; cần 24–48 giờ mới có dữ liệu
Requester Pays Requester trả tiền request + download; chủ bucket vẫn trả storage; requester phải đã xác thực
Event Notifications Đích trực tiếp: Lambda, SQS, SNS (cấp quyền bằng resource policy của đích); qua EventBridge để lọc JSON nâng cao, nhiều đích, archive/replay
Baseline performance 3.500 PUT/COPY/POST/DELETE và 5.500 GET/HEAD mỗi giây mỗi prefix; không giới hạn số prefix
Multi-Part upload Khuyến nghị > 100 MB, bắt buộc > 5 GB
Transfer Acceleration Đi qua edge location rồi vào region đích qua mạng AWS; kết hợp được với multi-part
Byte-Range Fetches Song song hóa GET theo byte range, hoặc chỉ lấy phần đầu file
Batch Operations Một request cho hàng loạt object; job = danh sách + hành động + tham số; lấy danh sách từ S3 Inventory, lọc bằng Athena
Storage Lens Phân tích toàn Organization, 30 ngày metric, export CSV/Parquet; free = ~28 metric giữ 14 ngày, advanced giữ 15 tháng