AWS Learning
Storage

Amazon S3 (Simple Storage Service)

Simple Storage Service, Storage Classes, Lifecycle, Security

Tổng quan

Amazon S3 là dịch vụ object storage với khả năng mở rộng không giới hạn, độ bền dữ liệu cao (99.999999999% - 11 nines), và hiệu suất tốt. S3 là một trong những dịch vụ cốt lõi và phổ biến nhất của AWS.

Durability 11 nines là gì?

99.999999999% durability có nghĩa: nếu lưu 10 triệu objects, thống kê bạn sẽ mất 1 object mỗi 10,000 năm.

AWS đạt được điều này bằng cách tự động replicate mỗi object sang ≥3 Availability Zones trong cùng Region - bạn không cần cấu hình gì.

Erasure Coding - Kỹ thuật đằng sau 11 nines

AWS sử dụng Erasure Coding thay vì replicate 3 bản copy đầy đủ, giúp tiết kiệm storage và vẫn đạt durability cao.

Cách hoạt động (ví dụ cấu hình 5+4):

Original file: 1 GB

┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ D1  │ D2  │ D3  │ D4  │ D5  │ P1  │ P2  │ P3  │ P4  │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
  5 data chunks        +      4 parity chunks

Total: 9 chunks phân tán qua ≥3 AZs
Storage overhead: 180% (thay vì 300% với 3x replication)

Fault Tolerance:

Mất chunksChunks còn lạiKết quả
0-45-9✅ Recover được
5+< 5Mất data

Cần ít nhất 5 chunks bất kỳ để rebuild data gốc.

Tại sao vẫn đạt 11 nines?

  • Chunks phân tán cross-AZ → mất cả 1 AZ vẫn OK
  • Auto-healing: AWS liên tục check và rebuild chunks bị corrupt
  • Xác suất mất 5+ chunks đồng thời: ~10^-15

⚠️ Lưu ý: AWS không công bố chính xác cấu hình erasure coding. 5+4 là thông tin từ nguồn phân tích bên ngoài.

Các kỹ thuật Internal khác của S3

1. Checksums & Data Integrity

S3 sử dụng checksums để đảm bảo data không bị corrupt:

UPLOAD:
  Client tính checksum (MD5, SHA-256, CRC32...)

  Gửi file + checksum lên S3

  S3 tính lại checksum trên server

  So sánh: khớp → store | không khớp → reject ❌

DATA AT REST (liên tục):
  Background job quét storage

  Phát hiện "bit rot" (data corrupt theo thời gian)

  Tự động repair từ chunk ở AZ khác

2. Shuffle Sharding - Giảm "Blast Radius"

Thay vì assign cố định buckets vào drives, AWS random assign:

FIXED (bad):                    SHUFFLE SHARDING (good):
─────────────                   ─────────────────────────
Bucket A → Drives {1, 2}        Bucket A → Drives {1, 5} (random)
Bucket B → Drives {1, 2}        Bucket B → Drives {2, 7} (random)
                               
Nếu Drive 1,2 chết:             Nếu Drive 1,2 chết:
→ A,B mất 100% ❌               → A mất 50%, B mất 50%
                                → Không ai mất hoàn toàn ✅

Lợi ích:

  • Fault isolation: Lỗi không lan rộng
  • Giảm blast radius: Mỗi bucket chỉ bị ảnh hưởng một phần

3. Cell-based Architecture

S3 được chia thành các "cells" độc lập:

AWS Region = "Supercell"
  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐
  │   Cell 1    │  │   Cell 2    │  │   Cell 3    │
  │  (S3 subset)│  │  (S3 subset)│  │  (S3 subset)│
  └─────────────┘  └─────────────┘  └─────────────┘
        │                │                │
        └────────────────┴────────────────┘

              Cells KHÔNG share state
              Lỗi Cell 1 không ảnh hưởng Cell 2,3

4. Two Random Choices (Load Balancing)

Khi cần lưu object vào drive:

Step 1: Random chọn 2 drives (A và B)
Step 2: Check utilization (% đã dùng) của cả 2
Step 3: Chọn drive có utilization THẤP hơn

Ví dụ:
  Drive A: 75% full ████████░░░
  Drive B: 30% full ███░░░░░░░░
  → Chọn Drive B (còn trống nhiều hơn)

Tại sao chỉ cần 2?

  • Random 1: Có thể chọn trúng drive đã full
  • Check tất cả: Quá chậm (hàng nghìn drives)
  • Two Random Choices: Nhanh + load khá đều (toán học chứng minh!)

Tổng kết các kỹ thuật

Kỹ thuậtMục đích
Erasure CodingDurability với ít storage overhead
ChecksumsPhát hiện và sửa data corruption
Shuffle ShardingFault isolation, giảm blast radius
Cell ArchitectureIsolate failures giữa các cells
Two Random ChoicesLoad balancing storage

Ngoại lệ (chỉ lưu trong 1 AZ, durability thấp hơn nếu AZ gặp sự cố):

  • S3 One Zone-IA
  • S3 Express One Zone

Lưu ý: Durability ≠ Availability. S3 Standard có 99.99% availability (có thể unavailable ~52 phút/năm), nhưng data vẫn không bị mất.

Use cases phổ biến:

  • Data lakes và big data analytics
  • Backup và disaster recovery
  • Static website hosting
  • Archive và long-term storage
  • Media hosting (images, videos)
  • Application data storage

Nguồn: What is Amazon S3?


Các khái niệm cơ bản

Buckets

  • Container chứa các objects
  • Tên bucket phải globally unique trên toàn bộ AWS
  • Bucket được tạo trong một Region cụ thể
  • 4 loại bucket:
    • General purpose buckets - bucket thông thường
    • Directory buckets - cho S3 Express One Zone (high performance)
    • Table buckets - cho tabular data
    • Vector buckets - cho vector storage (ML workloads)

Objects

  • Đơn vị lưu trữ cơ bản trong S3
  • Bao gồm: data + key (tên) + metadata
  • Kích thước tối đa: 5 TB per object
  • Upload > 5GB phải dùng multipart upload

Keys

  • Unique identifier cho object trong bucket
  • Full path: s3://bucket-name/folder/subfolder/file.txt
  • Key = folder/subfolder/file.txt

Versioning

  • Lưu giữ nhiều versions của cùng một object
  • Bảo vệ khỏi xóa nhầm và overwrite
  • Bật ở bucket level
  • Mỗi version có Version ID riêng

Storage Classes

S3 cung cấp nhiều storage classes cho các use cases khác nhau. Tất cả đều có durability 99.999999999% (11 nines).

Storage Class được chọn ở đâu?

Lưu ý: Storage class được chọn ở object level, không phải bucket level!

  • Khi upload object → chọn storage class cho object đó (Properties → Storage class)
  • Hoặc dùng Lifecycle rules để tự động chuyển objects giữa các classes
  • Ngoại lệ: S3 Express One Zone dùng Directory buckets - loại bucket riêng, phải chọn khi tạo bucket

Bảng so sánh tổng quan

Storage ClassAZsAvailabilityMin DurationMin Billable SizeRetrieval Fee
S3 Standard≥399.99%NoneNoneNone
S3 Express One Zone199.95%NoneNoneNone
S3 Intelligent-Tiering≥399.9%NoneNoneNone
S3 Standard-IA≥399.9%30 days128 KB*
S3 One Zone-IA199.5%30 days128 KB*
S3 Glacier Instant Retrieval≥399.9%90 days128 KB*
S3 Glacier Flexible Retrieval≥399.99%**90 days+40 KB metadata
S3 Glacier Deep Archive≥399.99%**180 days+40 KB metadata

*Min billable size: Bạn vẫn upload được file nhỏ hơn, nhưng bị charge như 128 KB **Sau khi restore


1. S3 Standard

Use case: Frequently accessed data (truy cập > 1 lần/tháng)

  • Storage class mặc định
  • Millisecond access
  • Không có retrieval fee, min duration, min size
  • Replicate across ≥3 AZs

Phù hợp cho: Websites, mobile apps, gaming, big data analytics


2. S3 Express One Zone

Use case: Ultra-low latency applications (single-digit milliseconds)

  • Nhanh nhất - latency thấp hơn S3 Standard tới 10x
  • Rẻ hơn 50% request costs so với S3 Standard
  • Chỉ lưu trong 1 AZ (bạn chọn AZ nào)
  • Dùng với Directory buckets (không phải general purpose buckets)

Tại sao nhanh hơn?

  • Co-location - chọn cùng AZ với EC2/EKS/Lambda → không có network latency cross-AZ
  • Custom hardware & software - AWS thiết kế riêng cho low-latency
  • Directory buckets - kiến trúc mới, hỗ trợ 2 triệu reads + 200K writes/giây
  • Session-based authorization - giảm overhead authentication mỗi request

Tại sao chỉ 1 AZ?

Đây là trade-off có chủ đích:

S3 Standard:  Write → Replicate to AZ1, AZ2, AZ3 → Confirm (slower, more durable)
S3 Express:   Write → Replicate trong 1 AZ only → Confirm (faster, less resilient)

Cross-AZ replication thêm network latency (vài ms). Để đạt single-digit ms, phải bỏ cross-AZ replication.

Phù hợp cho: ML training, real-time analytics, high-performance computing, cache/temporary data

Trade-off: Không resilient nếu AZ gặp sự cố - chỉ dùng cho data có thể tái tạo hoặc đã có backup ở nơi khác


3. S3 Intelligent-Tiering

Use case: Data có access patterns không biết trước hoặc thay đổi

"Access patterns không biết trước" là gì?

Ví dụ 1: E-commerce product images
- Sản phẩm mới upload → access nhiều (hot)
- 3 tháng sau → có thể vẫn hot, có thể không ai xem
- Bạn KHÔNG BIẾT TRƯỚC sản phẩm nào sẽ bán chạy

Ví dụ 2: User-generated content (YouTube, TikTok)
- Video mới → có thể viral (millions views) hoặc flop (10 views)
- Video cũ → có thể bỗng viral lại sau 1 năm
- Access pattern THAY ĐỔI liên tục, không dự đoán được

Đặc điểm:

  • Tự động di chuyển objects giữa các tiers - không cần quản lý
  • Không có retrieval fees (3 tiers đầu)
  • monitoring fee nhỏ per object (~$0.0025/1000 objects/month)
  • Objects < 128 KB không được monitor, luôn ở Frequent Access tier

5 Access Tiers (bên trong Intelligent-Tiering, không phải storage classes khác):

┌─────────────────────────────────────────────────────┐
│           S3 Intelligent-Tiering (1 storage class)  │
│  ┌───────────────────────────────────────────────┐  │
│  │  Frequent Access tier      ← upload vào đây   │  │
│  │  Infrequent Access tier    ← sau 30 ngày      │  │
│  │  Archive Instant Access    ← sau 90 ngày      │  │
│  │  Archive Access (optional) ← sau 90+ ngày     │  │
│  │  Deep Archive (optional)   ← sau 180+ ngày    │  │
│  └───────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
TierKhi nào chuyểnRetrieval
Frequent AccessDefault khi uploadMilliseconds
Infrequent AccessSau 30 ngày không accessMilliseconds
Archive Instant AccessSau 90 ngày không accessMilliseconds
Archive Access (optional)Sau 90+ ngày, cần activate3-5 hours
Deep Archive Access (optional)Sau 180+ ngày, cần activate12 hours

Lưu ý: Archive Access và Deep Archive Access tiers cần restore trước khi access.

So sánh Intelligent-Tiering vs Lifecycle Rules:

Intelligent-TieringLifecycle Rules
Monitoring fee~$0.0025/1000 objects/thángKhông
Retrieval feeKhông (3 tiers đầu) (từ IA, Glacier)
Cấu hìnhKhông cầnPhải tự định nghĩa rules
Di chuyểnTự động theo access thực tếTheo thời gian cố định
Khi nào Intelligent-Tiering rẻ hơn:
- File có thể bị access bất ngờ
- Lifecycle: Standard → Standard-IA → access → trả retrieval fee mỗi lần
- Intelligent-Tiering: access → KHÔNG fee, tự chuyển tier phù hợp

Khi nào Lifecycle rẻ hơn:
- Biết chắc 100% không access (vd: logs cũ)
- Lifecycle: Standard → Glacier → không trả monitoring fee

Tóm lại:

  • Biết chắc access pattern → Lifecycle rules (tiết kiệm monitoring fee)
  • Không biết / thay đổi → Intelligent-Tiering (tiết kiệm retrieval fee)

4. S3 Standard-IA (Infrequent Access)

Use case: Long-lived data, truy cập không thường xuyên (~1 lần/tháng), cần millisecond access

  • Giá storage rẻ hơn S3 Standard
  • retrieval fee per GB
  • Min storage duration: 30 ngày (xóa sớm vẫn bị charge 30 ngày)
  • Min billable size: 128 KB (object nhỏ hơn vẫn bị charge 128 KB)
  • Replicate across ≥3 AZs

Phù hợp cho: Backups, disaster recovery, older data cần truy cập nhanh

Khi nào dùng: Dữ liệu không thể tái tạo được


5. S3 One Zone-IA

Use case: Giống Standard-IA nhưng chấp nhận risk mất data nếu AZ fail

  • Rẻ hơn ~20% so với Standard-IA
  • Chỉ lưu trong 1 AZ
  • Min storage duration: 30 ngày
  • Min billable size: 128 KB

Phù hợp cho:

  • Secondary backup copies
  • Data có thể tái tạo được
  • Cross-Region Replication destination

Trade-off: Mất data nếu AZ bị destroy (động đất, lũ lụt)


6. S3 Glacier Instant Retrieval

Use case: Archive data, hiếm khi access (~1 lần/quý), nhưng cần millisecond retrieval

  • Storage cost thấp hơn Standard-IA 68%
  • Millisecond access - không cần restore
  • Min storage duration: 90 ngày
  • Min billable size: 128 KB
  • Retrieval fee cao hơn Standard-IA

Phù hợp cho: Medical images, news media assets, user-generated content archives


"Restore" là gì?

Một số storage classes (Glacier Flexible, Deep Archive) lưu data trên cold storage (có thể là tape) để giảm giá. Khi cần access, phải "restore" trước:

Millisecond access (Standard, IA, Glacier Instant):
  GET object → nhận data ngay lập tức

Cần restore (Glacier Flexible, Deep Archive):
  GET object → Error 403 (phải restore trước!)
  
  Bước 1: POST restore request
  Bước 2: Chờ 1 phút → 48 giờ (tuỳ option và storage class)
  Bước 3: AWS copy object tạm sang tier có thể access
  Bước 4: GET object → nhận data
  Bước 5: Sau X ngày (bạn chọn), bản copy tạm bị xóa

Tại sao thiết kế vậy? Đổi lại thời gian chờ → giá storage rẻ hơn rất nhiều.


7. S3 Glacier Flexible Retrieval

Use case: Archive data, access ~1 lần/năm, không cần immediate access

  • Storage cost rất thấp
  • Min storage duration: 90 ngày
  • Phải restore trước khi access (không real-time)

Retrieval options:

OptionThời gianCost
Expedited1-5 minutesCao nhất
Standard3-5 hoursTrung bình
Bulk5-12 hoursThấp nhất

Phù hợp cho: Backup, disaster recovery, compliance archives


8. S3 Glacier Deep Archive

Use case: Long-term archive, access < 1 lần/năm, lưu trữ 7-10+ năm

  • Rẻ nhất trong tất cả storage classes
  • Min storage duration: 180 ngày
  • Phải restore trước khi access

Retrieval options:

OptionThời gian
Standard12 hours
Bulk48 hours

Phù hợp cho: Compliance archives (financial, healthcare), magnetic tape replacement


Lưu ý quan trọng về Min Duration và Min Size

Ví dụ với S3 Standard-IA (min 30 days, min 128 KB):

1. Upload file 50 KB → bị charge như 128 KB
2. Upload file, xóa sau 10 ngày → vẫn bị charge 30 ngày storage
3. Upload file, transition sang Glacier sau 15 ngày → charge 30 ngày Standard-IA + Glacier

Nguồn: Understanding and managing Amazon S3 storage classes


Storage Management

S3 Lifecycle

Tự động chuyển objects giữa storage classes hoặc xóa sau một thời gian:

Lifecycle Rule Example:
- Transition to Standard-IA after 30 days
- Transition to Glacier after 90 days
- Delete after 365 days

Matrix transition storage class (Lifecycle)

S3 Lifecycle hỗ trợ transition theo mô hình "waterfall" (đi xuống lớp rẻ hơn), không phải mọi cặp source/destination đều hợp lệ.

Từ storage classCó thể transition sang (qua Lifecycle)
S3 StandardStandard-IA, Intelligent-Tiering, One Zone-IA, Glacier Instant Retrieval, Glacier Flexible Retrieval, Glacier Deep Archive
S3 Standard-IAIntelligent-Tiering, One Zone-IA, Glacier Instant Retrieval, Glacier Flexible Retrieval, Glacier Deep Archive
S3 Intelligent-TieringPhụ thuộc access tier; có thể sang One Zone-IA hoặc các lớp Glacier tương ứng
S3 One Zone-IAGlacier Flexible Retrieval, Glacier Deep Archive
S3 Glacier Instant RetrievalGlacier Flexible Retrieval, Glacier Deep Archive
S3 Glacier Flexible RetrievalGlacier Deep Archive

Các transition hay nhầm trong đề thi:

  • S3 Intelligent-Tiering => S3 Standard (không được hỗ trợ bởi Lifecycle)
  • S3 One Zone-IA => S3 Standard-IA (không được hỗ trợ bởi Lifecycle)
  • S3 Standard-IA => S3 One Zone-IA (được hỗ trợ)

Nguồn: Transitioning objects using Amazon S3 Lifecycle, Using S3 Intelligent-Tiering

S3 Replication

Lưu ý: Đây là tính năng bạn tự cấu hình, khác với việc AWS tự động replicate sang 3 AZs!

2 loại replication khác nhau:

Automatic (3 AZs)S3 Replication (CRR/SRR)
Cấu hìnhAWS tự động làmBạn phải tự setup
ScopeTrong cùng 1 bucket, cùng RegionSang bucket khác
Mục đíchDurability 11 ninesDR, compliance, latency
ControlKhông control đượcBạn chọn destination
Automatic 3 AZs (bạn không thấy, không control):
┌─────────────────────────────────────┐
│  Bucket A (us-east-1)               │
│  ┌─────┐  ┌─────┐  ┌─────┐          │
│  │ AZ1 │  │ AZ2 │  │ AZ3 │  ← AWS tự động
│  └─────┘  └─────┘  └─────┘          │
└─────────────────────────────────────┘

S3 Replication (bạn cấu hình):
┌──────────────────┐     ┌──────────────────┐
│ Bucket A         │ ──► │ Bucket B         │
│ (us-east-1)      │     │ (eu-west-1)      │  ← bạn setup
└──────────────────┘     └──────────────────┘

Các loại S3 Replication:

  • Cross-Region Replication (CRR) - replicate sang Region khác
  • Same-Region Replication (SRR) - replicate trong cùng Region

Yêu cầu: Versioning phải enabled ở cả source và destination bucket

Use cases:

  • CRR: Disaster recovery, compliance (data phải ở EU), giảm latency cho users ở region khác
  • SRR: Aggregate logs từ nhiều buckets, copy giữa dev/prod accounts

Xem thêm: AWS Overview - Regions và AZs để hiểu về Region, AZ

S3 Object Lock

Chống xóa/overwrite objects theo mô hình WORM (Write Once Read Many) - thường dùng cho compliance.

2 cách bảo vệ:

Retention PeriodLegal Hold
Thời hạnCố định (vd: 365 ngày)Không có, cho đến khi tắt
Use caseCompliance, regulatoryLitigation, điều tra, audit
Kết thúcTự động hết hạnPhải manually remove

2 Retention Modes:

┌─────────────────────────────────────────────────────────────┐
│                    GOVERNANCE MODE                          │
│  - Users thường KHÔNG THỂ xóa/overwrite                     │
│  - Users có permission s3:BypassGovernanceRetention CÓ THỂ  │
│  - Có thể extend hoặc shorten retention                     │
│  - Use case: Test, flexible WORM                            │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                    COMPLIANCE MODE                          │
│  - KHÔNG AI có thể xóa, kể cả root user                     │
│  - KHÔNG THỂ shorten retention period                       │
│  - Cách duy nhất xóa sớm: XÓA CẢ AWS ACCOUNT                │
│  - Use case: Regulatory compliance (SEC, FINRA, HIPAA)      │
└─────────────────────────────────────────────────────────────┘

Ví dụ thực tế:

Scenario: Ngân hàng cần giữ records 7 năm (compliance)

1. Enable Object Lock trên bucket (khi tạo bucket)
2. Set default retention: 7 years, Compliance mode
3. Upload transaction records

→ Không ai có thể xóa records trong 7 năm
→ Kể cả CEO, kể cả root account
→ Đáp ứng audit requirements

Yêu cầu & lưu ý:

  • Versioning phải enabled
  • Object Lock phải enable khi tạo bucket (không thể enable sau với existing bucket)
  • Một khi enable, không thể disable

Nguồn: S3 Object Lock

S3 Batch Operations

  • Thực hiện operations trên hàng triệu/tỷ objects
  • Operations: Copy, Invoke Lambda, Restore, Tagging, etc.

Access Management & Security

Default Security

  • Buckets và objects mặc định là private
  • Chỉ owner/account administrator có access

Access Control Methods

MethodScopeUse Case
IAM PoliciesUser/Role levelControl user access to S3
Bucket PoliciesBucket levelCross-account, public access
Access PointsNamed endpointsSimplified access for shared datasets
ACLsObject/Bucket levelLegacy, không khuyến khích
S3 Block Public AccessAccount/Bucket levelPrevent public access

Bucket Policy Example

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Encryption

Server-Side Encryption (SSE):

  • SSE-S3 - AWS managed keys (default từ Jan 2023)
  • SSE-KMS - Customer managed keys via KMS
  • SSE-C - Customer-provided keys
  • DSSE-KMS - Dual-layer encryption

Client-Side Encryption:

  • Encrypt trước khi upload

S3 Object Ownership

  • Bucket owner enforced (recommended) - disable ACLs, bucket owner owns all objects
  • Bucket owner preferred - bucket owner owns objects nếu upload với bucket-owner-full-control
  • Object writer - uploader owns the object

Xem chi tiết: S3 Security - Access Control, Encryption, Block Public Access, Pre-signed URLs, VPC Endpoints

Nguồn: Amazon S3 Security Features


S3 Performance

Baseline Performance

S3 có khả năng xử lý rất cao out-of-the-box:

MetricPer Prefix
GET/HEAD requests5,500 requests/second
PUT/COPY/POST/DELETE3,500 requests/second

Prefix = phần path trước object name. Ví dụ: bucket/folder1/subfolder/ là 1 prefix.

Ví dụ: Bucket với nhiều prefixes

s3://my-bucket/images/2024/   ← 5,500 GET/s + 3,500 PUT/s
s3://my-bucket/images/2025/   ← 5,500 GET/s + 3,500 PUT/s  
s3://my-bucket/videos/        ← 5,500 GET/s + 3,500 PUT/s

→ Dùng nhiều prefixes = Scale gần như vô hạn!

Tối ưu Performance

1. Multi-Part Upload

Bắt buộc cho files > 5GB, khuyến nghị cho files > 100MB.

┌─────────────────────────────────────────────────────────────────┐
│                    MULTI-PART UPLOAD                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  File 1GB                                                       │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ Part 1 │ Part 2 │ Part 3 │ Part 4 │ ... │ Part 10       │    │
│  │ 100MB  │ 100MB  │ 100MB  │ 100MB  │     │ 100MB         │    │
│  └───┬────┴───┬────┴───┬────┴───┬────┴─────┴───┬───────────┘    │
│      │        │        │        │              │                │
│      ▼        ▼        ▼        ▼              ▼                │
│   Upload   Upload   Upload   Upload         Upload              │
│   song song (parallel) → NHANH HƠN!                             │
│      │        │        │        │              │                │
│      └────────┴────────┴────────┴──────────────┘                │
│                        │                                        │
│                         ▼                                       │
│                  S3 ghép lại thành 1 file                       │
│                                                                 │
│  ✅ Upload song song nhiều parts                                │
│  ✅ Retry chỉ parts failed (không retry cả file)                │
│  ✅ Bắt đầu upload khi vẫn đang generate file                   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2. S3 Transfer Acceleration

Upload/download qua AWS Edge Locations thay vì public internet.

WITHOUT Acceleration:        WITH Acceleration:
User ──► Internet ──► S3     User ──► Edge ══► AWS Backbone ══► S3
         (slow)                       (fast)    (optimized)
  • Endpoint: bucket-name.s3-accelerate.amazonaws.com
  • Chỉ charge khi thực sự nhanh hơn
  • Tốt cho: long-distance transfers, large files

3. Byte-Range Fetches (Parallel Downloads)

Download một phần file hoặc download song song nhiều phần.

┌─────────────────────────────────────────────────────────────────┐
│                    BYTE-RANGE FETCHES                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  File 1GB trên S3                                               │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ 0-100MB │ 100-200MB │ 200-300MB │ ... │ 900MB-1GB       │    │
│  └───┬─────┴─────┬─────┴──────┬────┴─────┴───────┬─────────┘    │
│      │           │            │                  │              │
│      ▼           ▼            ▼                   ▼             │
│  GET byte=0-100MB  GET byte=100-200MB  ...  GET byte=900-1GB    │
│      │           │            │                  │              │
│      └───────────┴────────────┴───────────────────┘             │
│                         │                                       │
│                          ▼                                      │
│                   Ghép lại ở client                             │
│                                                                 │
│  ✅ Download song song (parallel) → NHANH HƠN                   │
│  ✅ Retry chỉ phần failed                                       │
│  ✅ Download chỉ phần cần thiết (vd: header của video)          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Use cases:

  • Parallel download để tăng tốc
  • Download chỉ metadata/header của file
  • Resume download bị gián đoạn

4. S3 Select / Glacier Select

Query data trực tiếp trong S3 mà không cần download toàn bộ file.

Truyền thống:
Download 1GB CSV → Filter ở client → Chỉ cần 10MB data
→ Tốn bandwidth, chậm

S3 Select:
Query trực tiếp trên S3 → Chỉ trả về 10MB data cần
→ Tiết kiệm bandwidth, nhanh hơn
-- S3 Select query (SQL-like)
SELECT s.name, s.age FROM S3Object s WHERE s.age > 25

Hỗ trợ formats: CSV, JSON, Parquet

Tóm tắt Performance Optimizations

TechniqueUse CaseBenefit
Multi-Part UploadFiles > 100MBParallel upload, retry parts
Transfer AccelerationLong distanceFaster via Edge Locations
Byte-Range FetchesLarge downloadsParallel download, partial fetch
S3 SelectQuery large filesReduce data transfer
Multiple PrefixesHigh throughputScale requests linearly

Nguồn: S3 Performance Guidelines


Data Processing

S3 Object Lambda

S3 Object Lambda cho phép thêm code để transform data on-the-fly khi GET object, mà không cần sửa object gốc.

┌─────────────────────────────────────────────────────────────────┐
│                    S3 OBJECT LAMBDA                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Truyền thống (không có Object Lambda):                         │
│                                                                 │
│  App ──► GET object ──► S3 ──► Raw data                         │
│  App ──► Transform locally (tốn CPU, memory)                    │
│                                                                 │
│  HOẶC: Store nhiều versions (original + transformed)            │
│        → Tốn storage, phải sync                                 │
│                                                                 │
│  ────────────────────────────────────────────────────────────── │
│                                                                 │
│  Với S3 Object Lambda:                                          │
│                                                                 │
│  App ──► Object Lambda ──► Lambda Function ──► S3               │
│          Access Point        (transform)        (raw data)      │
│               │                  │                              │
│               └─────► Trả về transformed data                   │
│                                                                 │
│  → Chỉ lưu 1 bản gốc, transform khi cần                         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Cách hoạt động

┌───────────┐    ┌─────────────────────┐    ┌──────────────┐    ┌──────────┐
│    App    │───►│ Object Lambda       │───►│    Lambda    │───►│    S3    │
│           │    │ Access Point        │    │   Function   │    │  Bucket  │
└───────────┘    └─────────────────────┘    └──────────────┘    └──────────┘
      │                                            │
      │◄───────── Transformed Response ────────────┘
  1. App gọi Object Lambda Access Point (không gọi trực tiếp S3)
  2. Object Lambda Access Point invoke Lambda function
  3. Lambda lấy object gốc từ S3, transform, trả về cho app

Use Cases phổ biến

Use CaseMô tả
Resize imagesTrả về thumbnail thay vì image gốc
Redact PIIChe thông tin nhạy cảm (SSN, email...)
Convert formatsXML → JSON, PNG → WebP
DecompressGunzip on-the-fly
Add watermarkThêm watermark vào images
Filter dataTrả về subset của data dựa trên user role
Enrich dataThêm metadata từ external source

Ví dụ: Redact PII

┌─────────────────────────────────────────────────────────────────┐
│  Original JSON in S3:                                           │
│  {                                                              │
│    "name": "John Doe",                                          │
│    "email": "john@example.com",    ← PII                        │
│    "ssn": "123-45-6789",           ← PII                        │
│    "department": "Engineering"                                  │
│  }                                                              │
│                                                                 │
│  After Object Lambda (redact):                                  │
│  {                                                              │
│    "name": "John Doe",                                          │
│    "email": "***REDACTED***",      ← Đã che                     │
│    "ssn": "***REDACTED***",        ← Đã che                     │
│    "department": "Engineering"                                  │
│  }                                                              │
└─────────────────────────────────────────────────────────────────┘

Lambda Function Example (Node.js)

const { S3 } = require('@aws-sdk/client-s3');
 
exports.handler = async (event) => {
  // Get object từ S3
  const s3Client = new S3();
  const response = await s3Client.getObject({
    Bucket: event.getObjectContext.inputS3Url,
  });
  
  // Transform data
  const originalData = await response.Body.transformToString();
  const jsonData = JSON.parse(originalData);
  
  // Redact PII
  jsonData.email = "***REDACTED***";
  jsonData.ssn = "***REDACTED***";
  
  // Return transformed data
  await s3Client.writeGetObjectResponse({
    RequestRoute: event.getObjectContext.outputRoute,
    RequestToken: event.getObjectContext.outputToken,
    Body: JSON.stringify(jsonData),
  });
  
  return { statusCode: 200 };
};

So sánh với các giải pháp khác

ApproachStoragePerformanceFlexibility
Store multiple versions❌ Nhiều✅ Nhanh❌ Phải sync
Transform on client✅ 1 bản❌ Chậm✅ Linh hoạt
S3 Object Lambda✅ 1 bản⚡ Tốt✅ Linh hoạt

Pricing

  • Lambda invocation: Tính như Lambda bình thường
  • Data transfer: Từ S3 → Lambda → Client
  • No additional Object Lambda fee

💡 Khi nào dùng: Khi cần transform data nhưng không muốn lưu nhiều versions, hoặc transformation phụ thuộc vào context (user role, request params...).

Event Notifications

Trigger workflows khi có changes trong S3.

Cách hoạt động

┌─────────────────────────────────────────────────────────────────┐
│                    S3 EVENT NOTIFICATIONS                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   S3 Bucket                                                     │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  Object Created (PUT, POST, COPY, MultiPart)            │   │
│   │  Object Removed (DELETE, DeleteMarkerCreated)           │   │
│   │  Object Restore (Glacier restore completed)             │   │
│   │  Replication Events                                     │   │
│   │  ...                                                    │   │
│   └─────────────────────────────────────────────────────────┘   │
│                             │                                   │
│                              ▼                                  │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                   DESTINATIONS                          │   │
│   │                                                         │   │
│   │   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌───────────┐  │   │
│   │   │   SNS   │  │   SQS   │  │ Lambda  │  │EventBridge│  │   │
│   │   └─────────┘  └─────────┘  └─────────┘  └───────────┘  │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Các loại Events

Event TypeTrigger khi
s3:ObjectCreated:*PUT, POST, COPY, MultipartUpload complete
s3:ObjectRemoved:*DELETE hoặc DeleteMarkerCreated
s3:ObjectRestore:*Glacier restore bắt đầu/hoàn thành
s3:Replication:*Replication failed/completed
s3:LifecycleExpiration:*Object bị xóa bởi lifecycle
s3:LifecycleTransitionObject chuyển storage class
s3:IntelligentTieringObject chuyển tier trong IT

Destinations

DestinationUse CaseĐặc điểm
Amazon SNSFan-out (gửi đến nhiều subscribers)Push notifications, email, SMS
Amazon SQSQueue xử lý tuần tựDecoupling, retry, batch processing
AWS LambdaServerless processingReal-time, custom code
EventBridgeComplex routing, filteringRules, cross-account, archive

So sánh Destinations

SNS (Fan-out):
┌─────┐
│ S3  │──► SNS ──┬──► SQS Queue 1
└─────┘          ├──► SQS Queue 2  
                 ├──► Lambda
                 └──► Email

SQS (Queue):
┌─────┐          ┌─────────┐
│ S3  │──► SQS ──► Workers │  (xử lý tuần tự)
└─────┘          └─────────┘

Lambda (Direct):
┌─────┐          ┌────────────────────────┐
│ S3  │──► Lambda (resize image, process) │
└─────┘          └────────────────────────┘

EventBridge (Advanced):
┌─────┐                   ┌─► Lambda A (*.jpg)
│ S3  │──► EventBridge ───┼─► SQS (*.pdf)
└─────┘     (filter)      └─► SNS (*.mp4)

Use Cases phổ biến

Use CaseEventDestinationAction
Image thumbnailObjectCreatedLambdaResize, save thumbnail
Video transcodingObjectCreatedSQS → MediaConvertConvert video formats
Log processingObjectCreatedLambda → ESIndex logs cho search
Backup notificationObjectCreatedSNS → EmailNotify admin
Data pipelineObjectCreatedEventBridge → Step FunctionsETL workflow
Audit trailAll eventsEventBridge → CloudWatch LogsLogging

Ví dụ: Image Processing Pipeline

┌─────────────────────────────────────────────────────────────────────┐
│                    IMAGE PROCESSING PIPELINE                        │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   User uploads image.jpg                                            │
│              │                                                      │
│           ▼                                                         │
│   ┌───────────────┐                                                 │
│   │ S3 Bucket         │                                             │
│   │ /uploads/         │                                             │
│   └───────┬───────┘                                                 │
│           │ s3:ObjectCreated:Put                                    │
│           ▼                                                         │
│   ┌───────────────┐                                                 │
│   │    Lambda         │                                             │
│   │ (resize.py)       │                                             │
│   └───────┬───────┘                                                 │
│              │                                                      │
│     ┌─────┼─────┐                                                   │
│     ▼     ▼     ▼                                                   │
│   small  med  large                                                 │
│   100px  300px 800px                                                │
│     │     │         │                                               │
│     ▼     ▼     ▼                                                   │
│     ┌───────────┐                                                   │
│     │ S3 Bucket     │                                               │
│     │ /thumbnails/  │                                               │
│     └───────────┘                                                   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

Lưu ý quan trọng

[!IMPORTANT] Permissions: Destination (SNS/SQS/Lambda) phải có policy cho phép S3 gửi events.

// SQS Policy Example
{
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"Service": "s3.amazonaws.com"},
    "Action": "sqs:SendMessage",
    "Resource": "arn:aws:sqs:region:account:queue",
    "Condition": {
      "ArnLike": {"aws:SourceArn": "arn:aws:s3:::bucket-name"}
    }
  }]
}

[!TIP] EventBridge vs Legacy (SNS/SQS/Lambda):

  • Legacy: Faster, simpler, direct integration
  • EventBridge: More powerful filtering, routing rules, cross-account, archive events

Monitoring & Analytics

Monitoring Tools

ToolPurpose
CloudWatch MetricsMonitor operational health
CloudTrailAPI logging và auditing
Server Access LoggingDetailed request logs
S3 Storage Lens60+ metrics, dashboards

Analytics

  • Storage Class Analysis - phân tích access patterns để tối ưu storage class
  • S3 Inventory - báo cáo objects và metadata

Data Consistency

S3 cung cấp strong read-after-write consistency:

  • PUT new object → immediately readable
  • PUT overwrite → immediately see new version
  • DELETE → immediately not found

Applies to tất cả AWS Regions.


Pricing

S3 tính phí theo:

  • Storage - GB per month
  • Requests - PUT, COPY, POST, LIST, GET, SELECT
  • Data Transfer - OUT to internet, cross-region
  • Management features - Inventory, Analytics, Object Tagging

Free Tier (12 months):

  • 5 GB S3 Standard storage
  • 20,000 GET requests
  • 2,000 PUT requests

Nguồn: Amazon S3 Pricing


Requester Pays

Requester Pays cho phép bucket owner chuyển chi phí data transfer và request sang cho người request (requester) thay vì trả tiền tất cả.

Vấn đề cần giải quyết

TÌNH HUỐNG THÔNG THƯỜNG:
┌─────────────────────────────────────────────────────────────────┐
│  Bạn có 100TB dữ liệu research để chia sẻ                       │
│                                                                 │
│  User A download 10TB ─┐                                        │
│  User B download 20TB  ├──► BẠN phải trả ~$2,700/tháng!         │
│  User C download 30TB ─┘    (data transfer out)                 │
│                                                                 │
│  → Càng nhiều người dùng, bạn càng TỐN TIỀN                     │
└─────────────────────────────────────────────────────────────────┘

VỚI REQUESTER PAYS:
┌─────────────────────────────────────────────────────────────────┐
│  Bạn chỉ trả chi phí STORAGE (~$2,300/tháng cho 100TB)          │
│                                                                 │
│  User A download 10TB ──► User A trả $900                       │
│  User B download 20TB ──► User B trả $1,800                     │
│  User C download 30TB ──► User C trả $0 (nếu cùng region)       │
│                                                                 │
│  → Công bằng: ai dùng, người đó trả                             │
└─────────────────────────────────────────────────────────────────┘

Chi phí được chuyển cho Requester

Chi phíBucket OwnerRequester
Storage✅ Trả-
Data Transfer OUT-✅ Trả
GET/PUT Requests-✅ Trả
Same-region transfer-Miễn phí

Cách hoạt động

1. Bucket owner enable "Requester Pays" trên bucket

2. Requester phải:
   ├── Có AWS account (authenticated)
   ├── Gửi request với header: x-amz-request-payer: requester
   └── Hoặc CLI: --request-payer requester

3. AWS tính phí vào account của requester, không phải bucket owner

Lưu ý quan trọng:

  • Anonymous access không hoạt động - Requester PHẢI có AWS account
  • ❌ Không thể dùng pre-signed URLs (vì cần authenticated request)
  • ✅ Bucket owner vẫn control access qua bucket policy

Use Cases

Use CaseMô tả
Public datasetsNASA, genome data, weather data - ai dùng, người đó trả
Data marketplaceBán/share data mà không lo chi phí bandwidth
Research dataUniversities share research data
Media archivesStock photos/videos, download theo nhu cầu

Ví dụ CLI

# Download từ requester pays bucket
aws s3 cp s3://requester-pays-bucket/file.txt ./file.txt --request-payer requester
 
# List objects
aws s3 ls s3://requester-pays-bucket/ --request-payer requester

Enable Requester Pays

# Enable
aws s3api put-bucket-request-payment \
  --bucket my-bucket \
  --request-payment-configuration Payer=Requester
 
# Check status
aws s3api get-bucket-request-payment --bucket my-bucket

Nguồn: Using Requester Pays buckets


Best Practices

  1. Enable versioning để bảo vệ khỏi accidental deletes
  2. Use Lifecycle policies để tối ưu costs
  3. Enable S3 Block Public Access trừ khi cần public
  4. Use SSE-KMS cho sensitive data
  5. Enable CloudTrail để audit access
  6. Use S3 Intelligent-Tiering nếu không biết access patterns
  7. Use multipart upload cho files > 100MB
  8. Use S3 Transfer Acceleration cho long-distance transfers

S3 Transfer Acceleration

Tăng tốc upload/download files qua long distances bằng AWS Edge Locations.

WITHOUT Acceleration:        WITH Acceleration:
User ──► Internet ──► S3     User ──► Edge ══► AWS Backbone ══► S3
         (slow)                       (fast)    (optimized)

Key points:

  • Dùng endpoint: bucket-name.s3-accelerate.amazonaws.com
  • Chỉ charge khi nhanh hơn (AWS tự động bypass nếu không cải thiện)
  • Pricing: ~$0.04-0.08/GB
  • Hiệu quả nhất khi: client xa bucket, file lớn

📖 Xem chi tiết: S3 Transfer Acceleration Deep Dive

S3 Transfer Acceleration vs Global Accelerator

⚠️ Câu hỏi thường gặp: Hai dịch vụ này KHÁC NHAU nhưng cùng dùng AWS Edge Locations!

S3 Transfer Acceleration:
User ──► Edge Location ──► AWS Backbone ──► S3 Bucket
• CHỈ cho S3 uploads/downloads
• URL: bucket.s3-accelerate.amazonaws.com

Global Accelerator:
User ──► Edge Location ──► AWS Backbone ──► ALB/NLB/EC2
• Cho BẤT KỲ TCP/UDP application
• KHÔNG hỗ trợ S3 trực tiếp
FeatureS3 Transfer AccelerationGlobal Accelerator
Mục đíchTăng tốc S3 upload/downloadTăng tốc any TCP/UDP app
Hỗ trợ S3?✅ Có (chính)❌ Không
Hỗ trợ ALB/EC2?❌ Không✅ Có
Static IP❌ Không✅ 2 Anycast IPs
Failover❌ Không✅ Instant failover
Cách bậtPer-bucket settingTạo Accelerator riêng

💡 Tóm lại: S3 Transfer Acceleration = "Global Accelerator cho riêng S3"


So sánh với EBS và EFS

FeatureS3EBSEFS
TypeObject storageBlock storageFile storage
AccessHTTP/HTTPS APIAttached to EC2NFS mount
ScopeRegionalSingle AZRegional
Max sizeUnlimited64 TiB/volumeUnlimited
Use caseStatic files, backupsOS, databasesShared files

Liên kết

  • EBS - Block storage cho EC2
  • EFS - Shared file storage
  • IAM - Access management
  • VPC - Network configuration

Tài liệu tham khảo

On this page

Tổng quanDurability 11 nines là gì?Erasure Coding - Kỹ thuật đằng sau 11 ninesCác kỹ thuật Internal khác của S31. Checksums & Data Integrity2. Shuffle Sharding - Giảm "Blast Radius"3. Cell-based Architecture4. Two Random Choices (Load Balancing)Tổng kết các kỹ thuậtCác khái niệm cơ bảnBucketsObjectsKeysVersioningStorage ClassesStorage Class được chọn ở đâu?Bảng so sánh tổng quan1. S3 Standard2. S3 Express One Zone3. S3 Intelligent-Tiering4. S3 Standard-IA (Infrequent Access)5. S3 One Zone-IA6. S3 Glacier Instant Retrieval"Restore" là gì?7. S3 Glacier Flexible Retrieval8. S3 Glacier Deep ArchiveLưu ý quan trọng về Min Duration và Min SizeStorage ManagementS3 LifecycleMatrix transition storage class (Lifecycle)S3 ReplicationS3 Object LockS3 Batch OperationsAccess Management & SecurityDefault SecurityAccess Control MethodsBucket Policy ExampleEncryptionS3 Object OwnershipS3 PerformanceBaseline PerformanceTối ưu Performance1. Multi-Part Upload2. S3 Transfer Acceleration3. Byte-Range Fetches (Parallel Downloads)4. S3 Select / Glacier SelectTóm tắt Performance OptimizationsData ProcessingS3 Object LambdaCách hoạt độngUse Cases phổ biếnVí dụ: Redact PIILambda Function Example (Node.js)So sánh với các giải pháp khácPricingEvent NotificationsCách hoạt độngCác loại EventsDestinationsSo sánh DestinationsUse Cases phổ biếnVí dụ: Image Processing PipelineLưu ý quan trọngMonitoring & AnalyticsMonitoring ToolsAnalyticsData ConsistencyPricingRequester PaysVấn đề cần giải quyếtChi phí được chuyển cho RequesterCách hoạt độngUse CasesVí dụ CLIEnable Requester PaysBest PracticesS3 Transfer AccelerationS3 Transfer Acceleration vs Global AcceleratorSo sánh với EBS và EFSLiên kếtTài liệu tham khảo