Amazon Elastic File System (EFS)
Elastic File System, Shared Storage, Storage Classes
EFS là gì?
Amazon EFS là dịch vụ file storage được quản lý hoàn toàn (fully managed), cho phép chia sẻ file giữa nhiều EC2 instances cùng lúc.
Tại sao cần EFS?
Vấn đề: Nhiều EC2 instances cần đọc/ghi cùng 1 file.
Ví dụ thực tế
Website WordPress với nhiều servers:
EFS xử lý Concurrent Access như thế nào?
EFS dùng NFS protocol với file locking, tránh data corruption:
EBS Multi-Attach thì sao?
EBS có Multi-Attach nhưng rất hạn chế:
| EBS Multi-Attach | EFS | |
|---|---|---|
| Across AZs | ❌ Chỉ 1 AZ | ✅ Nhiều AZs |
| Volume type | Chỉ io1/io2 (đắt) | Tất cả |
| Max instances | 16 | Hàng nghìn |
| File locking | ❌ Cần cluster filesystem | ✅ Tự động (NFS) |
| Dễ dùng | ❌ Phức tạp | ✅ Mount như folder |
📌 Thực tế: 99% cần shared storage → dùng EFS. EBS Multi-Attach chỉ cho clustered databases đặc biệt.
EFS vs S3 - Khác nhau hoàn toàn!
| S3 | EFS | |
|---|---|---|
| Truy cập | HTTP API | Mount như folder |
| Sửa 1 phần file | ❌ Download → sửa → upload | ✅ Sửa trực tiếp |
| App cần file path | ❌ Phải đổi code | ✅ Dùng luôn /mnt/efs/... |
| Random access | ❌ Không | ✅ Có |
| Cost | Rẻ hơn | Đắt hơn |
Ví dụ chọn S3 hay EFS
| Tình huống | Dùng |
|---|---|
| WordPress uploads | EFS - mount vào /uploads, không đổi code |
| App đọc config /etc/myapp/config.yaml | EFS - app đọc file bình thường |
| Video editing (đọc/ghi random trong file) | EFS - cần random access |
| Backup 10TB ảnh (ít truy cập) | S3 - rẻ hơn nhiều |
| Static website hosting | S3 - có tính năng hosting |
Tóm lại các loại Storage
| Storage | Giống như | Use case |
|---|---|---|
| S3 | Google Drive (upload/download) | Backup, static files, data lake |
| EFS | Ổ cứng mạng (NAS) | App cần file path, shared config |
| EBS | Ổ cứng USB | Database, OS, 1 instance |
So sánh EFS vs EBS vs Instance Store
EFS hoạt động như thế nào?
Mount Target là gì?
Mount Target = Điểm kết nối để EC2 truy cập vào EFS. Nó có IP address trong subnet của bạn.
Tại sao cần Mount Target?
Mount Target trong mỗi AZ
Để EC2 ở các AZ khác nhau đều truy cập được EFS, tạo Mount Target trong mỗi AZ:
Best Practice
| Rule | Lý do |
|---|---|
| Tạo Mount Target trong mỗi AZ | High availability |
| EC2 mount từ Mount Target cùng AZ | Nhanh hơn + không tốn data transfer |
| EC2 có thể mount từ AZ khác | Nhưng chậm hơn + tốn phí |
Mount Target có mất phí không?
Không! Mount Target miễn phí. Cứ tạo ở mỗi AZ.
| Thành phần | Có phí? |
|---|---|
| Mount Target | ❌ Miễn phí |
| Storage (GB/tháng) | ✅ Có |
| Data transfer cross-AZ | ✅ Có |
File System Types
Regional (Khuyến nghị)
AWS tự động replicate data qua nhiều AZs (bạn không thấy, không quản lý):
One Zone
Data chỉ lưu trong 1 AZ, nhưng vẫn share được từ EC2 ở AZ khác:
So sánh Regional vs One Zone
| Regional | One Zone | |
|---|---|---|
| Data lưu ở đâu | Replicate qua nhiều AZs | Chỉ 1 AZ |
| EC2 ở AZ khác truy cập được? | ✅ Được | ✅ Được (qua network) |
| 1 AZ down | Vẫn OK | ❌ Không truy cập được |
| Mount Target | Mỗi AZ có 1 | Chỉ 1 ở AZ chứa data |
| Cost | Đắt hơn | Rẻ hơn ~47% |
| Use case | Production, critical | Dev/test, có thể recreate |
Storage Classes
Storage Classes = Các loại lưu trữ với giá và tốc độ khác nhau, để tiết kiệm tiền.
Ví dụ thực tế
3 Storage Classes
So sánh chi phí
| Standard | IA | Archive | |
|---|---|---|---|
| Giá storage | $0.30/GB | $0.016/GB | $0.008/GB |
| Giá access | Miễn phí | $0.01/GB | $0.03-0.06/GB |
| Tốc độ | Nhanh nhất | Chậm hơn | Chậm nhất |
| Dùng cho | Files dùng thường xuyên | Files ít dùng | Files gần như không dùng |
Lifecycle Management
EFS tự động chuyển files giữa storage classes dựa trên access pattern. Bạn không cần tự move files:
Ví dụ tiết kiệm cost
Cấu hình Lifecycle Policy
| Policy | Ý nghĩa |
|---|---|
TransitionToIA=AFTER_30_DAYS | Sau 30 ngày không access → chuyển sang IA |
TransitionToArchive=AFTER_90_DAYS | Sau 90 ngày không access → chuyển sang Archive |
TransitionToPrimaryStorageClass=AFTER_1_ACCESS | Khi access lại → chuyển về Standard |
Lưu ý
| Lưu ý | Chi tiết |
|---|---|
| Minimum storage duration | Archive: 90 ngày (tính phí dù xóa sớm) |
| Minimum file size | IA/Archive: 128KB (file nhỏ hơn vẫn tính 128KB) |
| Access cost | IA/Archive có phí khi đọc/ghi - đừng dùng cho files truy cập thường xuyên |
📌 Best Practice: Bật Lifecycle Management để tự động tiết kiệm cost. Không cần quản lý thủ công.
Performance Modes
Performance Mode quyết định latency và số connections - chọn khi tạo EFS, không đổi được.
| General Purpose | Max I/O | |
|---|---|---|
| Latency | Thấp (sub-millisecond) | Cao hơn |
| Max connections | Hàng nghìn | Hàng chục nghìn |
| Use case | Web, CMS, home dirs | Big data, media processing |
| Khuyến nghị | ✅ 99% trường hợp | Chỉ khi cần rất nhiều connections |
⚠️ Lưu ý: Sau khi tạo EFS, không thể đổi Performance Mode. Phải tạo EFS mới.
Throughput Modes
Throughput Mode quyết định tốc độ đọc/ghi (MB/s) - có thể đổi sau khi tạo.
So sánh Performance Mode vs Throughput Mode
| Performance Mode | Throughput Mode | |
|---|---|---|
| Quyết định gì? | Latency + số connections | Tốc độ đọc/ghi (MB/s) |
| Đổi được không? | ❌ Không | ✅ Có |
| Options | General Purpose, Max I/O | Elastic, Bursting, Provisioned |
3 Throughput Modes
| Mode | Throughput | Trả tiền | Dùng khi |
|---|---|---|---|
| Elastic | Tự động scale | Theo thực tế | Không biết cần bao nhiêu |
| Bursting | Dựa trên size | Gồm trong storage | EFS nhỏ, tiết kiệm |
| Provisioned | Cố định | Cố định/tháng | Cần throughput ổn định |
📌 99% trường hợp: Chọn General Purpose + Elastic là xong.
Mount EFS trên EC2
Cài đặt EFS Utils
Mount EFS
Auto mount khi boot (/etc/fstab)
Security
Security Groups
Encryption
| Loại | Mô tả |
|---|---|
| At rest | Data được encrypt khi lưu trên disk (dùng KMS) |
| In transit | Data được encrypt khi truyền qua network (TLS) |
Access Points
Access Points = Cổng vào EFS với permissions và root directory riêng cho mỗi application.
Ví dụ với Containers:
Access Point config:
| Config | Ý nghĩa |
|---|---|
| Root directory | Folder nào app được thấy (ví dụ: /app1/) |
| POSIX user (uid/gid) | App chạy với user nào (ví dụ: uid=1001) |
| Permissions | Quyền đọc/ghi |
Tạo Access Point:
📌 Dùng khi: Nhiều apps/containers share 1 EFS, cần isolation giữa chúng.
Use Cases
| Use Case | Tại sao dùng EFS? |
|---|---|
| Web serving | Nhiều web servers share cùng content |
| CMS (WordPress, Drupal) | Shared uploads, themes, plugins |
| Home directories | User files accessible từ nhiều instances |
| Container storage | ECS/EKS tasks share data |
| Lambda | Serverless functions cần file system |
| Machine Learning | Training data shared giữa nhiều instances |
| Big Data | Analytics trên shared dataset |
EFS với các AWS Services khác
Pricing
| Thành phần | Chi phí (us-east-1) |
|---|---|
| Standard storage | $0.30/GB/tháng |
| IA storage | $0.016/GB/tháng |
| Archive storage | $0.008/GB/tháng |
| IA access | $0.01/GB đọc/ghi |
| Archive access | $0.03/GB đọc, $0.06/GB ghi |
| Elastic Throughput | $0.04/GB transferred |
📌 One Zone storage classes rẻ hơn ~47% so với Regional
Hạn chế
| Hạn chế | Chi tiết |
|---|---|
| Không hỗ trợ Windows | Chỉ Linux-based instances |
| Chi phí cao hơn EBS | Đổi lại được shared access |
| Latency cao hơn EBS | Vì qua network (NFS) |
| Chỉ trong 1 VPC | Một file system chỉ có mount targets trong 1 VPC |
Tạo EFS qua CLI
Liên kết với các dịch vụ khác
- EC2 - Mount EFS trên EC2 instances
- EBS - So sánh block storage vs file storage
- VPC - EFS mount targets nằm trong VPC subnets
- Security Groups - Bảo vệ access đến EFS
Nguồn tham khảo: