0

S3 không chỉ là cái "kho chứa đồ": Những bài học mình rút ra sau khi làm việc với Cloud Storage

1. Mở đầu: Cái bẫy của sự tiện lợi

"Hồi mới làm quen với Backend, mình cứ nghĩ đơn giản: Cần lưu ảnh thì quăng lên server, cần scale thì mua thêm ổ cứng. Cho đến khi project phình to, việc quản lý file trở thành một cơn ác mộng.

Lúc đó, Amazon S3 (hoặc các dịch vụ tương đương như MinIO, Google Cloud Storage) hiện ra như một 'vị cứu tinh'. Nhưng đời không như là mơ, nếu cứ bê nguyên tư duy lưu file truyền thống lên S3, bạn sẽ sớm nhận được những hóa đơn 'khủng' hoặc tệ hơn là lộ sạch dữ liệu người dùng."

2. Đừng bao giờ Public Bucket (Sai lầm chết người)

"Nhiều bạn mới làm thường chọn cách nhanh nhất: Make Public cả cái bucket để lấy link ảnh cho lẹ. Đừng làm thế! Thực tế, mình luôn tuân thủ nguyên tắc Least Privilege:

IAM User: Tạo một user riêng cho App, chỉ có quyền s3:PutObject và s3:GetObject. Tuyệt đối không dùng quyền Admin cho code.

Private by default: Mọi thứ phải là private. Vậy làm sao để người dùng xem được ảnh? Câu trả lời là Presigned URLs."

3. "Tấm vé vào cửa" mang tên Presigned URL

"Thay vì để link ảnh tồn tại vĩnh viễn, mình dùng Go (hoặc Laravel) để generate ra một cái link tạm thời có thời hạn (ví dụ 5 phút).

Tại sao lại ngon? Nó giúp bảo mật tuyệt đối. Link hết hạn là vô dụng.

Tip cho Gopher: Trong SDK v2 của Go, việc xử lý Presigned URL cực kỳ mượt nhưng nhớ để ý cái context. Đừng để nó treo khi mạng chập chờn."

4. Cấu trúc Folder: Một cú lừa cảm giác

"Một sự thật thú vị: S3 không hề có khái niệm 'thư mục' (folder). Tất cả chỉ là một danh sách phẳng (flat list). Cái dấu / bạn thấy thực chất chỉ là một phần của cái tên (Prefix).

Kinh nghiệm của mình là đặt tên theo cấu trúc: [service_name]/[year]/[month]/[day]/[random_uuid].jpg. Việc này giúp bạn dễ dàng quản lý và sau này có muốn setup Lifecycle Policy (tự động xóa file cũ hoặc chuyển sang vùng lưu trữ rẻ hơn như Glacier) cũng cực kỳ nhàn."

5. Những cái "bẫy" về chi phí

"S3 rẻ, nhưng 'Data Transfer Out' thì không. Nếu bạn có một tấm ảnh 5MB và có 1 triệu lượt view trực tiếp từ S3, hãy chuẩn bị tinh thần trả tiền triệu.

Giải pháp: Luôn dùng một con CDN (như Cloudflare hoặc CloudFront) đứng trước S3. Nó vừa giúp load ảnh nhanh hơn, vừa giảm tải và tiết kiệm chi phí transfer cho Bucket của bạn."

6. Kết luận

"S3 rất mạnh, nhưng nó cần một người điều khiển có tâm. Hy vọng những chia sẻ nhỏ này giúp các bạn tránh được những cú lừa đầu đời khi làm việc với Cloud Storage.

Anh em có 'trick' nào hay với S3 nữa không? Cùng thảo luận ở dưới nhé!"


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí