Auto Scaling Group trong AWS – Bài 12

Trong quá trình vận hành một hệ thống trên AWS, nhu cầu về khả năng mở rộng linh hoạt và tiết kiệm chi phí là điều rất quan trọng. Nếu như bạn phải tự tay thêm hoặc xoá máy chủ (EC2) mỗi khi lưu lượng thay đổi thì không chỉ tốn công sức mà còn dễ dẫn đến lỗi. Đây là lúc Auto Scaling Group (ASG) phát huy tác dụng. Bài viết này sẽ giúp bạn hiểu từ A-Z về Auto Scaling Group: từ khái niệm, cách hoạt động, các loại chính sách mở rộng cho tới cách triển khai thực tế, có ví dụ cụ thể để bạn làm theo.

Xem thêm:

Tìm hiểu Amazon EFS (Elastic File System) – Bài 9

Application Load Balancer (ALB) trong AWS – Bài 10

Network Load Balancer (NLB) trong AWS – Bài 11

1. Auto Scaling Group (ASG) là gì?

Auto Scaling Group là một dịch vụ cho phép bạn tự động thêm hoặc xoá EC2 instances tuỳ theo nhu cầu sử dụng thực tế. Khi lưu lượng cao, hệ thống sẽ tự động tạo thêm máy chủ. Khi lưu lượng thấp, nó sẽ giảm bớt để tiết kiệm chi phí.

Việc sử dụng ASG giúp đảm bảo khả năng sẵn sàng cao (High Availability) trong khi vẫn tối ưu chi phí bằng cách chỉ chạy các tài nguyên cần thiết.

Lợi ích:

  • Đảm bảo hệ thống luôn sẵn sàng phục vụ người dùng.
  • Tiết kiệm chi phí: chỉ dùng bao nhiêu, trả bấy nhiêu.
  • Tự động khôi phục: Nếu 1 instance bị lỗi, ASG sẽ tự tạo mới để thay thế.

Auto Scaling Group (ASG)

2. Cách ASG hoạt động

ASG giúp tự động điều chỉnh số lượng EC2 instances. Hệ thống sẽ tăng số lượng instances khi lưu lượng truy cập cao và giảm khi nhu cầu giảm thông qua các thiết lập. Bạn cần khai báo 3 thông số chính khi tạo ASG:

  • Min Capacity: Số lượng tối thiểu luôn chạy.
  • Desired Capacity: Số lượng mong muốn (hệ thống sẽ cố gắng giữ ở mức này).
  • Max Capacity: Số lượng tối đa được phép chạy.

Auto Scaling Group (ASG)

ASG hoạt động dựa trên các scaling policies (chính sách mở rộng), giúp điều chỉnh số lượng EC2 instance theo thời gian thực hoặc theo lịch cố định.

3. Các loại Scaling Policies ASG

3.1. Dynamic Scaling

Tăng hoặc giảm instance dựa vào các chỉ số từ CloudWatch, như CPU, network, request count…

Target Tracking Scaling

Phương pháp đơn giản nhất để thiết lập mở rộng động:

  • Chọn một chỉ số giám sát (ví dụ: CPU Utilization).
  • Định nghĩa một giá trị mục tiêu (ví dụ: CPU luôn ở mức 40%).
  • ASG tự động thêm hoặc giảm instances để duy trì chỉ số này.

Ví dụ: Nếu CPU trung bình vượt 40%, ASG sẽ thêm instances; nếu giảm dưới 40%, ASG sẽ giảm instances.

Step Scaling

Phương pháp này dựa trên các CloudWatch Alarms:

  • Nếu CPU > 70% → thêm 2 instances.
  • Nếu CPU > 90% → thêm 3 instances.
  • Nếu CPU < 30% → giảm 1 instance.

Ưu điểm: Kiểm soát chi tiết hơn so với Target Tracking Scaling.

Simple Scaling

Giống như Step Scaling nhưng chỉ thực hiện một hành động tại một thời điểm. Ví dụ: CPU > 70% thì thêm 1 instance.

3.2. Scheduled Scaling

Khi biết trước thời điểm cần mở rộng hoặc thu hẹp, bạn có thể lên lịch:

  • Mở rộng: Tăng số lượng instances lên 10 vào 17h thứ Sáu.
  • Thu hẹp: Sau nửa đêm, giảm số lượng instances xuống mức tối thiểu.

3.3. Predictive Scaling

Dựa trên machine learning của AWS để dự báo nhu cầu tài nguyên:

  • Phân tích lịch sử sử dụng tài nguyên.
  • Dự đoán lưu lượng truy cập tương lai.
  • Lên lịch mở rộng hoặc thu hẹp từ trước.

Ưu điểm: Phù hợp cho hệ thống có mẫu hành vi lặp lại như trang TMĐT giờ cao điểm.

4. Lựa Chọn Chỉ Số Mở Rộng (Scaling Metrics)

Một số metric phổ biến:

  • CPU Utilization: Phù hợp với app tính toán nhiều.
  • Request Count Per Target: Dùng cho web server.
  • Network In/Out: Dùng cho ứng dụng tải file, streaming.
  • Custom Metrics: Bạn có thể tự tạo chỉ số riêng (ví dụ: response time > 200ms).

5. Scaling Cooldown

Sau mỗi lần scale, hệ thống sẽ đợi một khoảng thời gian trước khi thực hiện hành động tiếp theo (mặc định: 300 giây). Điều này giúp hệ thống ổn định và tránh bị scale liên tục.

  • Mặc định: 5 phút (300 giây).
  • Sau khi thêm/giảm instances, ASG đợi 5 phút trước khi hành động tiếp theo.
  • Giúp chỉ số ổn định và tránh phản ứng quá mức.

Cách tối ưu:

  • Sử dụng AMI sẵn sàng để EC2 khởi động nhanh.
  • Bật giám sát chi tiết để CloudWatch cập nhật mỗi phút thay vì 5 phút.

6. Auto Scaling Group – HandOn

Mục tiêu:

  • Tạo một Auto Scaling Group (ASG) sử dụng Launch Template.
  • Kết nối ASG với một Application Load Balancer (ALB).
  • Kiểm tra khả năng tự động tạo và huỷ EC2 instance.

Task 1: Tạo Auto Scaling Group

  1. Vào EC2 > Auto Scaling Groups > chọn Create Auto Scaling group.
  2. Điền:
    • Auto Scaling group name: Demo-ASG
    • Chọn Create a launch template
  3. Nhấn Next.

Tạo Auto Scaling Group

Tạo Auto Scaling Group

  • Tạo Auto Scaling Group

Task 2: Tạo Launch Template

  1. Điền thông tin:
    • Name: my-demo-template
    • Description: Template for ASG demo
    • AMI: Amazon Linux 2 (x86) – Free tier eligible
    • Instance Type: t2.micro
    • Key pair: Chọn một key pair sẵn có (ví dụ: EC2-tutorial)
    • Network settings: Chọn Security Group đã cho phép HTTP (ví dụ: launch-wizard-1)
    • Storage: Mặc định 8GB gp2
    • Advanced details: Dán đoạn User data để cài Apache và hiển thị “Hello World”.
  2. Nhấn Create launch template.
#!/bin/bash 
# Use this for your user data (script from top to bottom) 
# install httpd (Linux 2 version) 
yum update -y 
yum install -y httpd 
systemctl start httpd 
systemctl enable httpd 
echo "<h1>Hello EC2 Instance 1</h1>"> /var/www/html/index.html

Tạo Launch Template

Tạo Launch Template

Tạo Launch Template

Tạo Launch Template

Task 3: Cấu hình Launch Template

Trong phần Launch Tamplate > chọn my-demo-template

Cấu hình Launch Template

Task 4: Cấu hình VPC và mạng

  • VPC: Chọn VPC có sẵn.
  • Availability Zones: Chọn ít nhất 2 AZs để tăng tính sẵn sàng.
  • AZ Rebalancing: Giữ mặc định (Balanced – best effort).

Cấu hình VPC và mạng

Task 5: Cấu hình Auto Scaling Group

Cấu hình Auto Scaling Group

Cấu hình Auto Scaling Group

Cấu hình Auto Scaling Group

Cấu hình Auto Scaling Group

Cấu hình Auto Scaling Group

Cấu hình Auto Scaling Group

Task 6: Thử scale-out, scale-in

Làm tăng CPU lên quá 50%

sudo yum install stress -y
sudo stress --cpu 4 --timeout 3000s

Thử scale-out, scale-in

Thử scale-out, scale-in

Cảm ơn bạn đã tham khảo AWS Certified Solutions Architect Associate trên ttnguyen.net.

Bài viết cùng chủ đề:

Hướng dẫn tạo EC2 Instance chạy Amazon Linux trên AWS – Bài 5

EC2 Placement Groups trong AWS – Bài 6

AWS IPv4 Public – Cách tính phí mới nhất – Bài 7

EBS Volumes – EBS Snapshot – Lưu trữ cho EC2 Instances – Bài 8

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em