Amazon Machine Image (AMI)
Amazon Machine Image, Custom AMIs, Sharing, Lifecycle
AMI là gì?
Amazon Machine Image (AMI) là một template/metadata dùng để launch EC2 instance.
⚠️ Quan trọng: AMI không chứa data thật - nó chỉ chứa metadata và trỏ đến các EBS Snapshots.
AMI bao gồm
- Metadata: OS type, architecture, virtualization type
- Block device mapping: Định nghĩa các snapshots sẽ dùng để tạo volumes khi launch
- Launch permissions: Xác định ai có quyền sử dụng AMI
📌 Bắt buộc: Phải chỉ định AMI khi launch instance. AMI phải tương thích với instance type đã chọn.
AMI vs Volume vs Snapshot
| Thành phần | Là gì? | Lưu gì? |
|---|---|---|
| EBS Volume | Ổ đĩa ảo (đang chạy) | Data thật, gắn vào EC2 instance |
| Snapshot | Bản backup của Volume | Data thật, lưu trong S3 (compressed) |
| AMI | Template/Recipe | Chỉ lưu metadata + trỏ đến snapshots |
Flow tạo AMI và Launch Instance
Khi tạo AMI từ Instance
Snapshot Size vs Volume Size
| Volume | Dung lượng | Data thực | Snapshot size |
|---|---|---|---|
| Root | 50GB | 20GB | ~15-20GB (compressed) |
| Data | 200GB | 100GB | ~70-90GB (compressed) |
📌 Snapshot chỉ lưu blocks có data, bỏ qua blocks trống + có compression.
Khi Launch Instance từ AMI
📌 Mỗi instance = Volumes MỚI riêng biệt, độc lập với nhau.
Terminate Instance gốc thì sao?
📌 Snapshot là bản copy độc lập trong S3, không phụ thuộc vào volume gốc.
Snapshot lưu trong S3 nhưng bạn không thấy được
Xóa Snapshot thì sao?
| Trường hợp | Kết quả |
|---|---|
| Xóa snapshot trong khi AMI vẫn trỏ đến | ❌ AMI bị hỏng, launch sẽ fail |
| Deregister AMI trước, rồi xóa snapshot | ✅ OK |
⚠️ AWS không tự động xóa snapshots khi deregister AMI → phải xóa thủ công để tránh phí storage.
AMI lưu gì từ Instance?
Những gì ĐƯỢC lưu (trên EBS volumes)
| Thành phần | Ví dụ |
|---|---|
| Hệ điều hành | Amazon Linux, Ubuntu, Windows |
| Phần mềm đã cài | nginx, Docker, Java, Python... |
| Cấu hình hệ thống | /etc/nginx/nginx.conf, systemd services |
| Files trên disk | Code, scripts, database files |
| User accounts | Users tạo trong OS |
Những gì KHÔNG được lưu
| Thành phần | Lý do |
|---|---|
| Instance type | Chọn lại khi launch |
| Security Groups | Chọn lại khi launch |
| IAM Role | Chọn lại khi launch |
| Key pair | Chọn lại khi launch |
| Network settings | IP, subnet - chọn lại khi launch |
| RAM state | Chỉ lưu disk, không lưu memory |
| Instance Store data | Ephemeral - mất khi tạo AMI |
Đặc điểm của AMI
AMI được phân loại theo các đặc điểm sau:
| Đặc điểm | Mô tả |
|---|---|
| Region | AMI chỉ hoạt động trong Region cụ thể (có thể copy sang Region khác) |
| Operating System | Linux, Windows, macOS |
| Processor Architecture | 32-bit, 64-bit (x86), 64-bit (Arm) |
| Root Volume Type | EBS-backed hoặc Instance Store-backed |
| Virtualization Type | HVM hoặc PV (Paravirtual) |
Nguồn AMI
Bạn có thể sử dụng AMI từ nhiều nguồn:
- AWS-provided AMIs: AMIs do AWS cung cấp (Amazon Linux, Ubuntu, Windows Server...)
- AWS Marketplace: AMIs từ các vendor bên thứ ba (có thể mất phí)
- Community AMIs: AMIs công khai từ cộng đồng
- Shared AMIs: AMIs được chia sẻ từ tài khoản AWS khác
- Custom AMIs: AMIs tự tạo từ EC2 instances của bạn
Launch Permissions
| Loại | Mô tả |
|---|---|
| Public | Tất cả AWS accounts đều có thể sử dụng |
| Explicit | Chỉ các accounts/organizations được chỉ định mới có quyền |
| Implicit | Chủ sở hữu AMI tự động có quyền sử dụng |
Root Volume Type
AMI được phân loại theo loại root volume khi launch instance:
Sự khác biệt chính: Root data nằm ở đâu?
Hình dung trong Data Center
AMI type chỉ quyết định ROOT volume
Ví dụ: Dùng EBS-backed AMI nhưng vẫn có thể attach Instance Store cho data:
Khi nào dùng Instance Store?
| Dùng EBS | Dùng Instance Store |
|---|---|
| Database, files quan trọng | Cache, temp files |
| Cần data còn sau khi stop | Chấp nhận mất data |
| Cần backup (snapshot) | Cần I/O cực nhanh (local NVMe) |
📌 Instance Store cho data volume (cache, logs) vẫn phổ biến. Nhưng Instance Store cho root volume thì gần như không ai dùng nữa.
So sánh chi tiết
| Đặc điểm | EBS-backed | Instance Store-backed |
|---|---|---|
| Root data nằm ở | Server riêng (EBS) | Trong instance (local) |
| Boot time | < 1 phút | < 5 phút |
| Stop instance | ✅ Được, data còn | ❌ Không stop được |
| Terminate instance | ✅ Có thể giữ root volume | ❌ Mất hết |
| Thay đổi instance type | ✅ Có thể (khi stopped) | ❌ Không thể |
| Chi phí | Instance + EBS + Snapshot | Instance + S3 storage |
⚠️ Lưu ý: Instance Store-backed AMIs được coi là end of life và chỉ hỗ trợ trên các instance types cũ: C1, C3, D2, I2, M1, M2, M3, R3, X1.
Thực tế hiện nay dùng gì?
Tại sao EBS-backed thắng tuyệt đối?
| Lý do | Chi tiết |
|---|---|
| Stop/Start được | Tắt máy ban đêm tiết kiệm tiền, data vẫn còn |
| Dễ backup | Tạo snapshot dễ dàng |
| Thay đổi instance type | Nâng/hạ cấu hình linh hoạt |
| Reliability | Server lỗi → data vẫn an toàn ở EBS |
| AWS khuyến nghị | Tất cả AMI mới đều là EBS-backed |
Khi nào vẫn dùng Instance Store?
| Trường hợp | Ví dụ |
|---|---|
| Data volume (không phải root) | Cache Redis, temp files, logs |
| Stateless applications | Workers xử lý job, không cần lưu state |
| Cần I/O cực cao | Big data processing, local NVMe SSD |
📌 Kết luận: Khi chọn AMI trên AWS Console (Amazon Linux, Ubuntu, Windows...), mặc định đều là EBS-backed. Bạn không cần lo về Instance Store-backed AMI.
So sánh Cost
Chi phí trực tiếp:
| EBS-backed | Instance Store | |
|---|---|---|
| Instance cost | Trả theo giờ chạy | Trả theo giờ chạy |
| Storage cost | Trả thêm EBS ($/GB/tháng) | Miễn phí (đã gồm trong instance) |
| Snapshot cost | Trả thêm ($/GB/tháng) | Không có snapshot |
Nhưng thực tế phức tạp hơn:
Stop instance ảnh hưởng cost:
| EBS-backed | Instance Store-backed | |
|---|---|---|
| Stop được không? | ✅ Được | ❌ Không |
| Khi Stop | Không trả instance cost, vẫn trả EBS | Không stop được |
| Tiết kiệm ban đêm/weekend | ✅ Stop để tiết kiệm | ❌ Phải chạy 24/7 hoặc mất data |
Ví dụ thực tế:
Kết luận về cost:
| Trường hợp | Rẻ hơn |
|---|---|
| Server chạy 24/7, cần I/O cao | Instance Store có thể rẻ hơn |
| Server có thể Stop (dev, staging) | EBS-backed rẻ hơn nhiều |
| Cần flexibility | EBS-backed (Stop/Start thoải mái) |
📌 Thực tế: EBS-backed thường rẻ hơn vì có thể Stop instance khi không dùng.
Virtualization Types
AMI chứa thông tin virtualization type - cách AWS ảo hóa phần cứng để chạy instance:
2 loại Virtualization
Ảnh hưởng khi chọn AMI
| AMI type | Launch được trên |
|---|---|
| HVM | Tất cả instance types hiện tại |
| PV | Chỉ C1, M1, M2, M3, T1 (cũ) |
So sánh
| HVM | PV | |
|---|---|---|
| OS biết đang ảo hóa? | Không (nghĩ là máy thật) | Có (phải sửa đổi OS) |
| Enhanced Networking | ✅ Có | ❌ Không |
| GPU support | ✅ Có | ❌ Không |
| Instance types | Tất cả hiện tại | Chỉ cũ |
Thực tế hiện nay
📌 Kết luận: Tất cả AMI hiện tại đều là HVM. Bạn không cần chọn hay lo về virtualization type - AWS tự động dùng HVM.
AMI Lifecycle
Tạo Custom AMI
Từ EC2 Instance
| Tham số | Mô tả |
|---|---|
--no-reboot | Không reboot instance khi tạo AMI (có thể gây inconsistency) |
--reboot | Reboot instance để đảm bảo file system consistency (mặc định) |
Best Practices khi tạo AMI
-
Clean up trước khi tạo AMI:
- Xóa temporary files, logs
- Xóa SSH keys, credentials
- Clear bash history
-
Sử dụng
--rebootđể đảm bảo data consistency -
Tag AMI với metadata hữu ích (version, purpose, owner)
Copy AMI giữa các Regions
📌 AMI copy là asynchronous. Snapshot được copy trước, sau đó AMI mới được register.
Share AMI
Share với account cụ thể
Make AMI public
⚠️ Cảnh báo: Không public AMI chứa credentials, keys, hoặc data nhạy cảm.
AMI Billing
| Thành phần | Chi phí |
|---|---|
| AMI storage | EBS Snapshot storage costs |
| Data transfer | Khi copy AMI giữa các Regions |
| Marketplace AMIs | Có thể có phí license từ vendor |
Tìm AMI
Qua Console
- EC2 Console → AMIs (sidebar)
- Chọn filter: Owned by me, Public images, hoặc Private images
- Sử dụng search filters: Architecture, Root device type, Virtualization type
Qua CLI
Deregister AMI
📌 Deregister AMI không tự động xóa EBS snapshots. Bạn phải xóa thủ công để tránh chi phí storage.
Liên kết với các dịch vụ khác
- EC2 - Launch instances từ AMI
- EBS - Root volume và snapshots cho EBS-backed AMIs
- IAM - Permissions để tạo, share, và sử dụng AMIs
Nguồn tham khảo: