Amazon ECS (Elastic Container Service) là một dịch vụ quản lý container mạnh mẽ, cho phép bạn chạy và mở rộng các ứng dụng Docker trên nền tảng AWS. ECS hỗ trợ hai kiểu triển khai chính: EC2 Launch Type và Fargate Launch Type. Dưới đây là cái nhìn tổng quan về các thành phần quan trọng trong ECS.
Xem thêm:
1. Các kiểu triển khai chính
1.1. EC2 Launch Type
Khi sử dụng kiểu EC2, bạn sẽ phải tự quản lý cơ sở hạ tầng, tức là tự khởi tạo và vận hành các EC2 instances trong cụm ECS của mình.
- Mỗi instance cần cài đặt ECS Agent để liên kết với cụm ECS.
- Khi bạn khởi chạy các ECS Task, các container Docker sẽ được tự động phân bổ vào các EC2 instance có sẵn.
- Yêu cầu theo dõi và mở rộng thủ công các instance theo nhu cầu sử dụng tài nguyên.
1.2. Fargate Launch Type
Fargate là giải pháp serverless của ECS, giúp bạn không cần quản lý máy chủ vật lý.
- Chỉ cần định nghĩa task definition với cấu hình CPU và bộ nhớ cần thiết.
- AWS sẽ tự động triển khai và vận hành container.
- Dễ dàng mở rộng chỉ bằng cách tăng số lượng task.
- Fargate phù hợp cho các hệ thống linh hoạt, không muốn quản lý hạ tầng.
2. IAM Roles trong ECS
Amazon ECS sử dụng hai loại IAM roles quan trọng:
2.1. EC2 Instance Profile Role
- Áp dụng khi sử dụng kiểu EC2.
- Cho phép ECS Agent gọi API của ECS, CloudWatch Logs, ECR, Secrets Manager và SSM Parameter Store.
2.2. ECS Task Role
- Áp dụng cho cả EC2 và Fargate.
- Mỗi task có thể có một IAM role riêng để truy cập dịch vụ AWS khác nhau.
- Được cấu hình trực tiếp trong task definition.
- Ví dụ:
- Task A có role A để truy cập Amazon S3.
- Task B có role B để truy cập DynamoDB.
3. Load Balancer cho ECS
Để cung cấp endpoint HTTP/HTTPS cho các container ECS, bạn có thể tích hợp với Elastic Load Balancer:
- Application Load Balancer (ALB): Khuyên dùng, hỗ trợ đầy đủ tính năng cho cả Fargate và EC2.
- Network Load Balancer (NLB): Dùng cho trường hợp cần throughput cao hoặc tích hợp với PrivateLink.
- Classic Load Balancer (CLB): Đã cũ, không còn phù hợp và không hỗ trợ Fargate.
4. Lưu Trữ Dữ Liệu Với Amazon EFS
Khi cần lưu trữ dữ liệu dùng chung giữa các task, bạn nên sử dụng Amazon EFS (Elastic File System):
- Hỗ trợ cho cả EC2 và Fargate.
- Là hệ thống tệp mạng có thể mount vào nhiều ECS task cùng lúc.
- Hỗ trợ chia sẻ dữ liệu giữa các task hoạt động ở nhiều Availability Zones.
- Chiến lược tối ưu: Kết hợp Fargate + EFS để có hạ tầng hoàn toàn serverless và dễ mở rộng.
5. HandOn
Mục tiêu: Tạo ECS Cluster kết hợp Fargate và EC2 Launch Type
Trong bài thực hành này, bạn sẽ sử dụng AWS Management Console để tạo một ECS Cluster mới có thể triển khai task lên Fargate, Fargate Spot, và EC2 instances thông qua Auto Scaling Group.
Các bước thực hiện
Bước 1: Truy cập dịch vụ ECS
- Đăng nhập vào AWS Console.
- Vào ECS.
- Chọn Enable new ECS experience (nếu có tùy chọn này).
- Trong menu bên trái, chọn Clusters → Nhấn Create cluster.
Bước 2: Định cấu hình ECS Cluster
- Cluster name:
DemoCluster - Default namespace: để mặc định.
Infrastructure options:
- Bật AWS Fargate
- Bật Amazon EC2 instances
- (Tùy chọn) Bạn có thể bỏ chọn External instances (ECS Anywhere)
Bước 3: Cấu hình EC2 Auto Scaling Group
- Chọn OS: Amazon Linux 2 hoặc Amazon Linux 2023
- Instance type:
t2.micro(miễn phí nếu bạn thuộc Free Tier) - Desired capacity:
- Minimum:
0 - Maximum:
5
- Minimum:
- Key pair: để trống nếu không cần SSH.
- EBS Root Volume Size: giữ nguyên mặc định.
Bước 4: Cấu hình mạng
- VPC: chọn default VPC
- Subnets: chọn đủ 3 subnet thuộc 3 AZ (nếu có).
- Security Group: chọn default security group
- Auto-assign public IP: chọn Use subnet setting (default)
Bước 5: Tạo ECS Cluster
- Nhấn Create để tạo ECS Cluster.
- Chờ vài phút để hệ thống tạo Auto Scaling Group và các tài nguyên.
Bước 6: Kiểm tra Auto Scaling Group
- Trong AWS Console, chuyển đến EC2 → Auto Scaling Groups
- Tìm Auto Scaling Group mới tên là:
Infra-ECS-Cluster - Xác nhận thông số:
- Desired:
0 - Min:
0 - Max:
5 - Availability Zones: 3 AZs
- Desired:
Bước 7: Khởi tạo EC2 Instance thủ công
- Quay lại ECS → Clusters → DemoCluster
- Vào tab Infrastructure → chọn ASGProvider
- Nhấn Edit và đổi
Desired capacitythành1 - Điều này sẽ tạo 1 EC2 instance cho ECS cluster.
Bước 8: Kiểm tra container instance
- Sau vài phút, quay lại DemoCluster
- Trong tab Infrastructure → Container instances:
- Xác nhận 1 instance được đăng ký thành công.
- Kiểm tra tài nguyên khả dụng:
CPU: 1024,Memory: ~982MiB
Kết quả mong đợi
- ECS Cluster
DemoClusterđược tạo thành công. - Hỗ trợ cả Fargate, Fargate Spot và EC2.
- Có 1 EC2 instance sẵn sàng để chạy task ECS.
- Sẵn sàng tạo ECS Task hoặc Service.
Mục tiêu: Tạo ECS Task Definition và ECS Service sử dụng Fargate với Load Balancer
Trong task này, bạn sẽ:
- Tạo một ECS Task Definition với Docker image từ Docker Hub.
- Triển khai ECS Service chạy trên Fargate.
- Cấu hình Application Load Balancer để truy cập ứng dụng từ trình duyệt.
Bước 1: Tạo ECS Task Definition
- Truy cập AWS Console → ECS → Task Definitions → Create new task definition
- Family name:
nginxdemos-hello - Infrastructure requirement: Chọn
Fargate - Operating System:
Linux - Task size:
- vCPU:
0.5 vCPU - Memory:
1 GiB
- vCPU:
- Task role: Bỏ trống
- Task execution role: Giữ mặc định (nếu chưa có sẽ được tạo tự động)
- Container definition:
- Name:
nginxdemos-hello - Image:
nginxdemos/hello - Port mapping:
Container port 80, Protocol:TCP - Các phần khác giữ nguyên
- Name:
- Ephemeral storage: Giữ mặc định (
21 GiB) - Nhấn Create để hoàn tất.
Bước 2: Tạo ECS Service
- Quay lại ECS → Clusters → chọn
DemoCluster - Trong tab Services, nhấn Create
- Launch type:
Fargate - Platform version:
LATEST - Application type:
Service - Task definition: Chọn
nginxdemos-hello:1 - Service name:
nginxdemos-hello - Number of tasks (desired):
1 - Nhấn Next
Bước 3: Cấu hình mạng và bảo mật
- VPC: Chọn default VPC
- Subnets: Chọn cả 3 AZ (nếu có)
- Security Group:
- Chọn Create new security group
- Name:
nginxdemos-hello - Rule:
Allow HTTP (port 80) from Anywhere (0.0.0.0/0)
- Auto-assign public IP:
ENABLED
Bước 4: Tạo Application Load Balancer
- Enable Load balancing:
Yes - Load balancer type:
Application Load Balancer - Name:
DemoALBForECS - Health check grace period:
0 seconds - Target group name:
tg-nginxdemos-hello - Container to load balance:
- Name:
nginxdemos-hello - Port:
80
- Name:
- Health check path:
/
Bước 5: Hoàn tất cấu hình dịch vụ
- Bỏ qua phần Service auto scaling và Task placement
- Nhấn Create service
Bước 6: Kiểm tra hoạt động
- Vào lại Service → Tasks: đảm bảo 1 task đang chạy
- Vào Target Group: xác nhận 1 IP container được đăng ký
- Truy cập Load Balancer → DNS name
- Mở trình duyệt và dán DNS để thấy trang Hello từ NGINX
Bước 7: Scale dịch vụ lên 3 task
- ECS → Services → chọn
nginxdemos-hello→ Update - Thay
Number of tasksthành3, nhấn Update - Quay lại tab Tasks, kiểm tra 3 task đang chạy
- Mở trình duyệt và liên tục F5 để thấy IP thay đổi qua các container → chứng minh Load Balancer hoạt động
Bước 8: Scale về 0 để tiết kiệm chi phí
- ECS → Services →
nginxdemos-hello→ Update - Thay
Number of tasksthành0→ nhấn Update - Quay lại tab Tasks, xác nhận không còn task đang chạy
Kết quả mong đợi
- ECS service chạy Docker image
nginxdemos/hellothành công. - Có thể truy cập qua Load Balancer.
- Load balancing giữa nhiều container hoạt động chính xác.
- Có thể scale lên/xuống linh hoạt.