Tự động chạy Batch Job trên ECS với EventBridge — Từ A đến Z Chuyên mục Devops 2025-08-13 4 Lượt xem 4 Lượt thích 0 Bình luận
Trong hầu hết các hệ thống backend, chúng ta luôn có những tác vụ định kỳ cần chạy: tổng hợp dữ liệu, gửi email báo cáo, xử lý thanh toán, hoặc làm sạch dữ liệu cũ. Với AWS, có nhiều cách để thực hiện, nhưng một trong những cách linh hoạt và đơn giản nhất là sử dụng Amazon EventBridge kết hợp với ECS RunTask.
Trong bài này, mình sẽ chia sẻ cách mình triển khai batch job chạy mỗi 15 phút bằng EventBridge và ECS Fargate, đồng thời giải thích tại sao đây là lựa chọn tốt trong thực tế.
1. Tại sao lại chọn EventBridge + ECS RunTask?
Trước khi vào phần cấu hình, hãy nói về lý do:
-
Tách biệt workload
-
Batch job không chạy liên tục, chỉ kích hoạt khi cần.
-
Không ảnh hưởng tới API hay service chính đang chạy.
-
-
Tiết kiệm chi phí
-
Fargate chỉ tính tiền khi container chạy.
-
Không cần giữ một EC2 hay ECS service 24/7 chỉ để chạy cron.
-
-
Đơn giản hoá vận hành
-
Không cần viết cronjob trong container chính hoặc quản lý EC2 để chạy script.
-
Tất cả trigger và scheduling được quản lý trong EventBridge.
-
-
Tích hợp với hạ tầng AWS
-
Log tự động đẩy lên CloudWatch Logs.
-
Có thể scale số lượng task theo nhu cầu (ví dụ batch song song).
-
2. Chuẩn bị Task Definition cho batch job
Giả sử bạn đã có image Docker chứa script batch, ví dụ file:
/deployment/batch-jobs/batch-15min.sh
Lưu ý:
-
File
.sh
phải có quyền thực thi (chmod +x batch-15min.sh
). -
Trong Task Definition, cần trỏ
ENTRYPOINT
hoặcCMD
vào script này, hoặc sử dụng Overrides trong EventBridge (mình sẽ nói ở phần sau).
3. Test chạy thủ công trên ECS
Trước khi cấu hình EventBridge, hãy chạy thử job một lần:
-
Vào ECS → Clusters → Chọn cluster → Run new task.
-
Chọn Task Definition vừa tạo.
-
Chọn Launch type =
FARGATE
. -
Chọn Subnets và Security Group phù hợp (subnet private + NAT Gateway hoặc subnet public có public IP).
-
Bấm Run Task.
-
Xem log trong CloudWatch Logs → đảm bảo job chạy xong và in ra
"Finished 15min batch job"
.
4. Cấu hình EventBridge để chạy định kỳ
Giờ mới là phần chính: tự động chạy task này 15 phút/lần.
Bước 1 — Tạo EventBridge Rule
-
Vào Amazon EventBridge → Rules → Create Rule.
-
Đặt tên, ví dụ:
batch-15min-job
. -
Schedule pattern →
Rate-based schedule
→15 minutes
.
Bước 2 — Thêm Target
-
Target type → Amazon ECS → RunTask.
-
ECS cluster → chọn cluster đang dùng.
-
Task Definition → chọn batch job.
-
Revision → Latest.
-
Task count → 1 (hoặc nhiều hơn nếu cần song song).
-
Launch type → FARGATE.
-
Platform version → LATEST.
Bước 3 — Cấu hình mạng
-
Subnets: chọn các subnet mà service có thể chạy (ví dụ
subnet-01b6807daef11378f
,subnet-00bcd8b849b0e9cbe
). -
Security group: chọn SG cho phép kết nối cần thiết (ví dụ
sg-030c222d88d7f1d57
). -
Auto-assign public IP:
-
Disabled nếu dùng subnet private + NAT Gateway.
-
Enabled nếu dùng subnet public và muốn ra Internet trực tiếp.
-
Bước 4 — Overrides (tuỳ chọn)
Nếu không muốn chỉnh Task Definition, bạn có thể override command để chạy trực tiếp script batch:
5. Kiểm tra
Sau khi tạo rule:
-
Chờ tối đa 15 phút, job sẽ tự động chạy.
-
Vào CloudWatch Logs để kiểm tra log batch.
-
Nếu muốn test ngay: chọn rule → Test để trigger thủ công.
6. Kinh nghiệm thực tế
-
Log quan trọng: luôn in ra thời điểm bắt đầu/kết thúc để dễ debug.
-
Retry: nếu job quan trọng, cấu hình retry trong EventBridge.
-
Timeout: chỉnh
timeout
của container đủ dài để job chạy xong. -
Monitoring: có thể thêm CloudWatch Alarm khi job fail nhiều lần.
Kết luận
Việc dùng EventBridge + ECS RunTask giúp chúng ta:
-
Tách biệt batch job khỏi service chính.
-
Tiết kiệm chi phí (Fargate chỉ tính khi chạy).
-
Dễ mở rộng và bảo trì.
-
Hoàn toàn serverless — không cần quản lý máy chủ.
Nếu hệ thống của bạn đang dùng ECS, hãy cân nhắc chuyển toàn bộ cronjob sang EventBridge + RunTask. Bạn sẽ thấy hạ tầng nhẹ hơn, chi phí giảm và quản lý dễ dàng hơn rất nhiều.
Bình luận (0)