Triển khai ECS + ALB với Blue/Green Deployment: Hướng dẫn chi tiết và kinh nghiệm thực chiến Chuyên mục Devops 2025-05-01 0 Lượt xem 0 Lượt thích 0 Bình luận
Giới thiệu
Triển khai ứng dụng bằng ECS (Elastic Container Service) kết hợp với ALB (Application Load Balancer) theo mô hình Blue/Green Deployment là phương pháp an toàn và chuyên nghiệp để release phiên bản mới mà không gây downtime. Bài viết này chia sẻ cách triển khai bài bản bằng Terraform và AWS Console, đồng thời tổng hợp các lỗi thực tế thường gặp và cách xử lý.
1. Kiến trúc tổng quan
-
ECS Service chạy Fargate task.
-
ALB có nhiều Listener (HTTP:80, HTTP:8080...) để chuyển hướng đến các Target Group (TG).
-
TG trỏ tới container port đang chạy (ví dụ: 8000).
-
Blue/Green là kỹ thuật đổi TG trong Listener để deploy an toàn.
2. Cấu hình từng phần
🧱 Task Definition
"portMappings": [
{
"containerPort": 8000,
"hostPort": 8000,
"protocol": "tcp"
}
]
-
Đảm bảo containerPort = 8000 nếu app bạn chạy ở cổng 8000.
-
Với awsvpc, hostPort nên bằng containerPort.
🎯 Target Group (TG)
-
Port: 8000
-
Protocol: HTTP
-
Target Type: ip (cho Fargate)
-
Health Check:
-
Protocol: HTTP
-
Path: /health
-
Port: 8000
-
Matcher: 200-299
-
🌐 Application Load Balancer (ALB)
-
Có thể có nhiều Listener:
-
HTTP:80 → Blue TG
-
HTTP:8080 → Green TG (test)
-
-
Mỗi Listener chỉ được gán 1 port duy nhất.
🔒 Security Group
-
ALB SG:
-
Inbound: cho phép từ Internet (80/443)
-
-
ECS Task SG:
-
Inbound: cho phép từ ALB SG đến cổng 8000
-
⚙️ ECS Service
-
Gán đúng Target Group
-
Container name:port phải đúng với Task Definition
-
Health check grace period: nên đặt 30s – 60s nếu app khởi động chậm
3. Những lỗi thực tế đã gặp và cách xử lý
Vấn đề | Nguyên nhân | Cách khắc phục |
---|---|---|
Health check fail | ECS SG chưa mở cổng 8000 | Mở inbound từ ALB SG đến ECS port 8000 |
Listener conflict | Trùng port (80 hoặc 8080) | Kiểm tra Listener list và xóa trùng |
Target Group not found | Xóa thủ công trên console khi dùng Terraform | Chạy lại terraform apply để tạo lại đúng TG |
Không thấy ALB trong ECS Service | Thiếu cấu hình LB khi tạo ECS Service | Đảm bảo gán đúng TG & containerPort |
4. Terraform Tips
-
Khi dùng Terraform, tránh xóa resource thủ công → gây mất sync state.
-
Có thể dùng:
lifecycle {
ignore_changes = [default_action]
}
-
Điều này giúp tránh bị lỗi khi AWS CodeDeploy hoặc ECS thay đổi Target Group trong Blue/Green.
5. Quy trình triển khai lại Blue/Green đúng cách
-
Tạo task definition mới (version mới).
-
Tạo ECS Service hoặc Deployment mới gán với TG Green.
-
Deploy → kiểm tra health check Green TG.
-
Khi ổn định → đổi Listener 80 sang TG Green.
-
TG cũ trở thành Blue, có thể rollback nếu cần.
6. Kết luận
Việc triển khai ECS + ALB với Blue/Green giúp tăng tính an toàn khi release, tuy nhiên cần hiểu rõ cách hoạt động của TG, Listener, SG và ECS task để tránh lỗi phổ biến. Bài viết này hi vọng là tài liệu tham khảo tốt cho cả bạn và team.
Bình luận (0)