search

Amazon ECS là gì? Triển khai kết hợp Fargate và EC2 Launch Type – Bài 22

calendar_today Đăng ngày: 21/04/2026

Amazon ECS (Elastic Container Service) là dịch vụ quản lý container của AWS, cho phép bạn chạy ứng dụng Docker mà không cần tự dựng orchestration từ đầu. Bài này mình sẽ giải thích ECS hoạt động như thế nào, so sánh hai kiểu triển khai chính, rồi hướng dẫn thực hành tạo cluster + service có Load Balancer từ đầu đến cuối.

Xem thêm:

Amazon SQS – Bài 19

Amazon Simple Notification Service (AWS SNS) – Bài 20

Amazon Kinesis Data Streams- Bài 21

1. Amazon ECS là gì?

ECS là dịch vụ quản lý container fully-managed trên AWS. Bạn đóng gói ứng dụng vào Docker image, ECS lo phần còn lại: lên lịch chạy container, phân bổ tài nguyên, restart khi lỗi, scale khi cần. ECS không phải Kubernetes — nó đơn giản hơn, tích hợp sâu hơn với hệ sinh thái AWS (IAM, ALB, CloudWatch, ECR…), phù hợp khi bạn không muốn vận hành control plane phức tạp.

Quy trình triển khai docker lên AWS ECS:

Quy trình triển khai Docker lên AWS ECS

2. Hai kiểu triển khai: EC2 vs Fargate

2.1. EC2 Launch Type

Bạn tự quản lý EC2 instance trong cluster. Mỗi instance cần cài ECS Agent để đăng ký vào cluster và nhận task.

  • Phù hợp khi cần kiểm soát phần cứng, dùng instance type đặc thù (GPU, storage-optimized…)
  • Cần tự theo dõi và scale instance khi tải tăng
  • Chi phí thường thấp hơn nếu workload ổn định và dự đoán được

2.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ý EC2 nào cả. Chỉ cần khai báo CPU và memory. AWS tự lo phần hạ tầng.

  • Không cần quan tâm đến instance, AMI, hay ECS Agent
  • Scale bằng cách tăng số task, không cần nghĩ đến capacity
  • Phù hợp cho hầu hết use case hiện đại

2.3. So sánh triển khai EC2 và Fargate

Tiêu chí EC2 Launch Type Fargate
Quản lý hạ tầng Tự quản lý AWS quản lý
Kiểm soát instance Cao Không có
Chi phí Thấp hơn nếu ổn định Trả theo task
Độ phức tạp Cao hơn Thấp hơn
Phù hợp Workload dự đoán được Workload linh hoạt

3. IAM Roles trong ECS

Amazon ECS sử dụng hai loại IAM roles quan trọng:

3.1. EC2 Instance Profile Role

Chỉ áp dụng khi dùng EC2 Launch Type. Role này gắn vào EC2 instance, cho phép ECS Agent trên instance đó gọi được các AWS API cần thiết: đăng ký vào cluster, đẩy log lên CloudWatch, pull image từ ECR, lấy secret từ Secrets Manager.

3.2. ECS Task Role

Áp dụng cho cả EC2 lẫn Fargate. Role này gắn vào từng task, không phải instance. Dùng khi container của bạn cần gọi AWS API.


Task A → IAM Role A → truy cập S3
Task B → IAM Role B → truy cập DynamoDB;

4. Load Balancer và lưu trữ

4.1. Load Balancer

Để expose container ra ngoài qua HTTP/HTTPS, bạn dùng Elastic Load Balancer. Có ba loại:

  • ALB (Application Load Balancer): Khuyên dùng. Hỗ trợ đầy đủ, tích hợp tốt với cả EC2 lẫn Fargate, có path-based routing
  • NLB (Network Load Balancer): Dùng khi cần throughput cao hoặc tích hợp với AWS PrivateLink
  • CLB (Classic Load Balancer): Đã lỗi thời, không hỗ trợ Fargate — tránh dùng

4.2. Lưu trữ dùng chung với Amazon EFS

Nếu các task cần đọc/ghi vào cùng một filesystem (ví dụ: upload file, shared config), dùng Amazon EFS. Mount EFS vào nhiều task cùng lúc, kể cả task đang chạy ở các Availability Zone khác nhau.

Kết hợp Fargate + EFS là setup serverless hoàn toàn — không quản lý máy chủ, không quản lý storage server.

5. Thực hành: Tạo ECS Cluster với Fargate và EC2

Mục tiêu

Tạo một ECS Cluster hỗ trợ cả Fargate và EC2 Launch Type thông qua Auto Scaling Group.

Bước 1 — Tạo ECS Cluster

Vào AWS Console → ECS → Clusters → Create cluster.

Điền thông tin:

  • Cluster name: DemoCluster
  • Infrastructure: bật cả AWS FargateAmazon EC2 instances

Cấu hình EC2 Auto Scaling Group:

  • OS: Amazon Linux 2023
  • Instance type: t2.micro
  • Desired capacity: Min 0, Max 5
  • VPC: default, chọn đủ 3 subnet (3 AZ)
  • Security Group: default
  • Auto-assign public IP: theo subnet setting

Nhấn Create, chờ vài phút.

Bước 2 — Kiểm tra Auto Scaling Group

Vào EC2 → Auto Scaling Groups, tìm group tên Infra-ECS-Cluster. Xác nhận:

Desired: 0 | Min: 0 | Max: 5

Bước 3 — Khởi động thủ công 1 EC2 instance

Vào ECS → DemoCluster → tab InfrastructureASGProvider → Edit, đổi Desired capacity thành 1.

Sau vài phút, quay lại tab Container instances — bạn sẽ thấy:

1 instance đã đăng ký vào cluster
~1024 CPU unit
~982 MiB memory khả dụng

6. Thực hành: Deploy Service với Fargate và ALB

Mục tiêu

Tạo Task Definition chạy NGINX demo, deploy thành ECS Service trên Fargate, expose qua Application Load Balancer.

Bước 1 — Tạo Task Definition

Vào ECS → Task Definitions → Create new task definition.

Family name     : nginxdemos-hello
Launch type     : Fargate
OS              : Linux
vCPU            : 0.5
Memory          : 1 GiB
Task role       : (để trống)
Execution role  : (giữ mặc định)

Container definition:

Name  : nginxdemos-hello
Image : nginxdemos/hello
Port  : 80 / TCP

Nhấn Create.

Bước 2 — Tạo ECS Service

Vào DemoCluster → tab Services → Create.

Launch type      : Fargate
Task definition  : nginxdemos-hello:1
Service name     : nginxdemos-hello
Desired tasks    : 1

Bước 3 — Cấu hình network và security group

VPC              : default
Subnets          : chọn cả 3 AZ
Security Group   : tạo mới, allow HTTP port 80 từ 0.0.0.0/0
Public IP        : ENABLED

Bước 4 — Gắn Application Load Balancer

Load balancer type  : Application Load Balancer
Name                : DemoALBForECS
Target group        : tg-nginxdemos-hello
Container           : nginxdemos-hello:80
Health check path   : /
Grace period        : 0s

Nhấn Create service.

Bước 5 — Kiểm tra

  • Vào Service → Tasks, đợi task chuyển sang trạng thái RUNNING
  • Vào EC2 → Load Balancers, copy DNS name của DemoALBForECS
  • Mở trình duyệt → bạn sẽ thấy trang demo của NGINX

Bước 6 — Scale lên 3 task

Vào Service → Update, đổi Desired tasks thành 3.

# Không cần CLI — chỉ update qua Console
# Sau khi scale xong, F5 liên tục trên trình duyệt
# Bạn sẽ thấy Server address thay đổi giữa các container

Đây là bằng chứng ALB đang phân phối traffic đều qua 3 container.

Bước 7 — Dọn dẹp để tránh phát sinh chi phí

Đổi Desired tasks về 0 để dừng toàn bộ task.
Nếu không dùng nữa, xóa luôn Service và Load Balancer.

Shopee khuyến mãi