Chương 11: Containers
Tổng Quan
Containers đóng gói ứng dụng + dependencies thành đơn vị chạy nhất quán trên mọi môi trường. AWS cung cấp nhiều dịch vụ để chạy và quản lý containers.
1. Docker Basics (Ôn nhanh)
- Docker Image: Bản thiết kế (blueprint) chứa code + dependencies.
- Docker Container: Instance đang chạy từ Image.
- Dockerfile → Build → Image → Run → Container.
2. Amazon ECS (Elastic Container Service)
2.1 Hai Launch Types
| EC2 Launch Type | Fargate Launch Type | |
|---|---|---|
| Quản lý | Bạn quản lý EC2 instances | AWS quản lý hoàn toàn (Serverless) |
| Scaling | Tự cấu hình ASG | Tự động |
| Pricing | Trả tiền EC2 instances | Trả theo vCPU + RAM sử dụng |
| Use case | Cần control, spot instances | Đơn giản, không muốn quản lý infra |
2.2 Các khái niệm ECS
| Khái niệm | Mô tả |
|---|---|
| Task Definition | JSON blueprint: image, CPU, RAM, ports, IAM role |
| Task | 1 instance đang chạy của Task Definition |
| Service | Đảm bảo X tasks luôn chạy, tích hợp ELB |
| Cluster | Nhóm ECS instances/Fargate chạy tasks |
2.3 ECS IAM Roles
- EC2 Instance Profile (EC2 Launch Type): Cho ECS Agent gọi ECS API, pull image từ ECR.
- ECS Task Role: Quyền cho mỗi task riêng biệt (VD: Task A gọi S3, Task B gọi DynamoDB).
2.4 ECS + Load Balancer
- ALB: Được khuyến khích (hỗ trợ dynamic port mapping).
- NLB: Cho high throughput hoặc khi cần static IP.
3. Amazon ECR (Elastic Container Registry)
- Lưu trữ Docker images trên AWS (tương tự Docker Hub).
- Private hoặc Public repositories.
- Tích hợp với ECS/EKS — pull images trực tiếp.
- Hỗ trợ image vulnerability scanning.
4. Amazon EKS (Elastic Kubernetes Service)
- Managed Kubernetes trên AWS.
- Kubernetes là tiêu chuẩn ngành cho container orchestration.
- Hỗ trợ cả EC2 và Fargate launch types.
- Use case: Khi team đã dùng Kubernetes, cần portability (chạy on-premises hoặc cloud khác).
ECS vs EKS
| ECS | EKS | |
|---|---|---|
| Công nghệ | AWS proprietary | Kubernetes (open-source) |
| Portability | Chỉ AWS | Multi-cloud, on-premises |
| Learning curve | Đơn giản hơn | Phức tạp hơn |
| Best for | Team mới với containers | Team đã biết Kubernetes |
5. AWS App Runner
- Dịch vụ đơn giản nhất để deploy containers hoặc source code.
- Chỉ cần cung cấp container image hoặc source code → App Runner làm hết.
- Auto-scaling, load balancing, encryption, health checks.
- Use case: Web apps, APIs, microservices — khi không cần kiểm soát sâu.
Exam Tips 💡
- Fargate = Serverless containers. Không muốn quản lý EC2 → chọn Fargate.
- ECS Task Role ≠ EC2 Instance Profile. Task Role cho quyền ở task level.
- EKS khi đề nói "Kubernetes", "multi-cloud", "portability".
- ECR lưu Docker images. Tích hợp native với ECS/EKS.
- App Runner = giải pháp đơn giản nhất, không cần biết infra.
Câu Hỏi Ôn Tập 📝
Câu 1: Team muốn chạy containers mà không cần quản lý servers. Dùng gì?
Xem đáp án
Amazon ECS với Fargate launch type hoặc EKS với Fargate. Fargate là serverless — AWS quản lý hoàn toàn infrastructure.
Câu 2: Mỗi ECS task cần quyền AWS khác nhau (Task A → S3, Task B → SQS). Cấu hình bảo mật thế nào?
Xem đáp án
Gán ECS Task Role riêng biệt trong mỗi Task Definition. Task Role cấp quyền IAM ở mức từng task, không phải toàn bộ EC2 instance.
⬅️ Chương 10: Serverless | Chương 12: Decoupling & Messaging ➡️