Trong lĩnh vực điện toán đám mây, EC2 Auto Scaling là một công cụ quan trọng giúp bạn tự động mở rộng hoặc giảm tải tài nguyên dựa trên nhu cầu thực tế. Điều này không chỉ tối ưu hóa chi phí mà còn đảm bảo ứng dụng luôn duy trì hiệu suất ổn định. Bài viết này sẽ hướng dẫn bạn cách thiết lập Auto Scaling cho EC2 trên AWS một cách chi tiết.
Yêu Cầu
Trước khi bắt đầu, bạn cần chuẩn bị các yêu cầu sau:
- Tài khoản AWS đã được xác thực.
- Kiến thức cơ bản về AWS EC2 và CloudWatch.
EC2 Auto Scaling là gì?
AWS EC2 Auto Scaling là một dịch vụ giúp tự động thêm hoặc xóa các EC2 instances trong một Auto Scaling Group (ASG). Dựa vào các điều kiện được cấu hình sẵn (Scaling Policies), hệ thống sẽ tự động điều chỉnh số lượng EC2 instance phù hợp với nhu cầu sử dụng thực tế của ứng dụng. Lợi ích:
- Hiệu suất ổn định: Đảm bảo tài nguyên luôn sẵn sàng để đáp ứng lưu lượng truy cập.
- Tối ưu chi phí: Chỉ sử dụng tài nguyên khi cần thiết.
- Dễ quản lý: Tự động điều chỉnh mà không cần can thiệp thủ công.
Các khái niệm cơ bản
- Auto Scaling Group: Một nhóm các instance EC2 được quản lý bởi Auto Scaling.
- Launch Template: Một mẫu cấu hình để tạo ra các instance mới.
- Scaling Policy: Một tập hợp các quy tắc để quyết định khi nào và như thế nào để điều chỉnh số lượng instance.
- Target Tracking: Một loại scaling policy sử dụng một metric để điều chỉnh số lượng instance.
Chuẩn bị Application Load Balancer và Target group.
Để demo được Auto scaling thì ta cần cài đặt Application Load Balancer và Target group.
Bạn có thể làm tương tự ở đây Hướng dẫn tạo Application Load balancer trên AWS
Ở phần Target group ta nhập thông tin như sau:
- Target group name:
TG-group-Demo-ASG
- Register targets: Phần này không cần đăng ký instances. Vì ta sẽ dùng AutoScaling để đăng ký instance tự động.
Lúc này Target group ta tạo sẽ có:
- 0 targets
- 0 Healthy
- 0 Unhealthy
Chuẩn bị EC2 Instance
Trước khi thiết lập Auto Scaling, chúng ta cần chuẩn bị một AMI (Amazon Machine Image) hoặc EC2 instance mẫu.
- Tạo EC2 Instance mẫu:
- Name:
EC2-template-instance
- AMI Image:
Amazon Linux 2023
- Instance type:
t2.micro
(được áp dụng miễn phí với Free Tier). - Security group: Mở port 80, 443 để truy cập ứng dụng, port 22 cho SSH (nếu cần).
- Cấu hình User Data:
Tại mục
Advanced details
->User Data
, nhập script sau để cài đặt sẵn Nginx khi Instance khởi tạo:
#!/bin/bash
dnf update -y
dnf install nginx -y
systemctl start nginx
systemctl enable nginx
echo "<h1>EC2 Auto Scaling Instance: $(hostname -f)</h1>" > /usr/share/nginx/html/index.html
Có thể xem hướng dẫn chi tiết tạo EC2 ở đây: Hướng dẫn tạo AWS EC2
Tạo AMI
- Tạo AMI từ Instance template: Sau khi khởi tạo EC2 instance, bạn có thể tạo một AMI để sử dụng cho Auto Scaling.
- Vào EC2 Dashboard -> Instances , chọn Instance -> Actions -> Image and Templates -> Create Image .
Nhập thông tin như sau:
- Image name:
AMI-template-for-scaling
. Các thông tin còn lại hãy để giá trị mặc định và nhấnCreate Image
Tạo Launch Template
Launch Template lưu trữ các cấu hình cần thiết để khởi tạo EC2 instances trong Auto Scaling Group.
- Truy cập AWS EC2 Dashboard -> Launch Templates -> Nhấn Create Launch Template .
- Cấu hình thông tin:
- Template name:
Launch-template-ASG
- Amazon machine image (AMI): Chọn
AMI-template-for-scaling
. - Instance type:
t2.micro
. - Key pair: Tùy chọn (nếu cần SSH).
- Security group: Chọn group đã cấu hình ở bước trước.
- Advanced details: Để mặc định. Phần
Advanced details
này cũng tương tự nhưAdvanced details
lúc tạo EC2 Instance
- Nhấn Create Launch Template .
- Lưu ý. Bạn có thể Update Launch template với phiên bản mới và chỉ định Launch Template sử dụng phiên bản nào
Tạo Auto Scaling Group
Auto Scaling Group (ASG) là nhóm EC2 instances được quản lý bởi Auto Scaling.
Truy cập Auto Scaling Group
Truy cập AWS EC2 Dashboard -> Auto Scaling Groups -> Nhấn Create Auto Scaling Group .
Cấu hình Auto Scaling Group:
- Name:
ASG-demo-group
. - Launch template: Chọn
Launch-template-ASG
. - VPC: Chọn VPC chứa các Subnets của ứng dụng.
- Subnets: Đối với hầu hết các ứng dụng, bạn có thể sử dụng nhiều Vùng khả dụng và để EC2 Auto Scaling cân bằng các phiên bản của bạn trên các vùng. VPC mặc định và mạng con mặc định phù hợp để bắt đầu nhanh chóng.
Chú ý Instance type, Key pair name, Security group IDs. Vì các giá trị này được dùng để gắn vào các instance lúc khởi tạo.
Cấu hình Instance Launch
- Instance type requirements: Để mặc định
Nếu Launch Template bạn không chỉ định Instance type thì ở đây bạn phải nhập thông tin cần thiết như sau:
- Instance purchase options & Allocation strategies: Phần này cũng bắt cần thiết khi Launch Template không chỉ định Instance type
Network
- VPC: Chọn VPC giống với launch template
- Availability Zones and subnets: Chọn 1 hoặc nhiều subnets trong VPC. Chọn càng nhiều thì càng tăng tỉ lệ availability
- Availability Zone distribution: Chọn
Balanced best effort
Cấu hình Integrate with other services
Ở mục Integrate with other services
Cấu hình như sau:
- Load balancing: Chọn
Attach to an existing load balancer
- Attach to an existing load balancer: Nhấn option Choose from your load balancer target groups và chọn target groups vừa tạo xong: TG-group-Demo-ASG
- VPC Lattice integration options: Chọn
No VPC Lattice service
Application Recovery Controller
Ở mục này ta để mặc định
Health checks:
- EC2 health checks: Áp dụng mặc định. EC2 Auto Scaling sẽ luôn kiểm tra Instance có đang chạy hay không, Và theo dõi các issue liên quan đến software & hardware hoặc các phầm mềm có thể làm hỏng instance.
- Turn on Elastic Load Balancing health checks: Optional, bật Kiểm tra tình trạng Elastic load balancing để tăng tính khả dụng. Ở đây mình cần phải chọn
bật
- Turn on Amazon EBS health checks: Dùng để check tình trạng EBS được gắn vào Instance.
- Health check grace period: Đặt thời gian delay cho các lần kiểm tra tình trạng ban đầu. ở đây mình sẽ để mặc định
300
Cấu hình Group Size
Group Size - Desired capacity: Set số lượng instance mong muốn ở mặc định ban đầu. Ngoài ra bạn cũng có thể thay đổi Desired capacity type
sang đơn vị VCPUs, Memory(Gib) nếu không muốn dùng đơn vị Instance.
- Desired Capacity:
1
Cấu hình Scaling - Scaling limits
Mục Scaling dùng để xác định giới hạn cho các hoạt động tăng hoặc giảm số lượng instance. Ta nhập thông tin như sau:
- Min desired capacity:
1
- Số tượng instance tối thiểu(Lớn hơn hoặc bằng với giá trị của Desired capacity) - Max desired capacity:
3
- Số tượng instance tối đa có thể tăng lên.
Cấu hình Scaling - Automatic scaling
Đây là phần xác định có tự động tăng, giảm số lượng instance theo 1 điều kiện nào đó. có thể là ngưỡng CPU hoặc số lượng request trong Application Load balancer.
Nếu chọn No scaling policies
thì số lượng instance sẽ cố định và không thay đổi.
Ở phần này ta sẽ demo tự động tăng giảm nên sẽ chọn Target tracking scaling policy
và set điều kiện để tự động tăng giảm instance như sau:
- Scaling policy name: Tên tuỳ ý. Ở đây mình nhập Target Tracking Policy
- Metric type: Chọn
Average CPU utilization
- Target value:
50
- Nếu CPU đạt ngưỡng 50% sẽ trigger tăng Instance - Instance warmup: Để mặc định 300 seconds - Sẽ cần 300 seconds để Server khởi động trước khi đưa vào metric cho Autoscaling tính toán.
- Bởi vì lúc server khởi tạo sẽ ngốn khá nhiều CPU có khi là lên 50%. Vì không tính warmup thì health check failed sẽ khiến tiếp tục trigger scale out. Như vậy sẽ làm tăng quá nhiều instance.
Instance Maintenance Policy
Mục này dùng để Kiểm soát hành vi thay thế Instance để quản lý tính khả dụng và chi phí:
- Mixed behavior: Các phiên bản mới khởi chạy trước khi chấm dứt các phiên bản hiện có.
- Prioritize availability: Khởi chạy các phiên bản mới trước khi chấm dứt các phiên bản hiện có.
- Control costs: Chấm dứt và khởi chạy các phiên bản cùng lúc.
- Flexible: Tùy chỉnh hành vi dựa trên nhu cầu
ở đây mình chọn
Mixed behavior
Instance maintenance policy
- Capacity Reservation preference: chọn
Default
(Auto scaling sẽ sử dụng tùy chọnCapacity Reservation
từ Launch template)
Additional settings
Ở đây bạn có thể cho phép tracking lịch sử trên Cloudwatch để tiện theo dõi.
Add notifications
Bạn có thể cài đặt thông báo bằng cách sử dụng SNS
khi có bất cứ event như Launch, Terminate, Fail to launch, Fail to terminate. Phần này ta sẽ tìm hiểu sau
Add tags
Ở đây recommend nên tạo tag để tự động gắn vào các instance được tạo tự Auto scaling group Ta set Tag như sau:
- Key:
Name
, Value:ASG-test-machine
Review
- Xem lại tất cả các cấu hình bạn đã thực hiện.
- Đảm bảo mọi thứ được thiết lập theo yêu cầu của bạn.
- Nhấp vào Create Auto Scaling Group để hoàn tất quy trình.
- Lúc này status sẽ là:
Updating capacity
ta chờ 1 chút rồi kiểm tra lại.
Kiểm tra
Kiểm tra số lượng Ec2 instance
Thử kiểm tra số lượng Ec2 instance đang chạy với giá trị desired number
bạn đã chỉ định.
Vào EC2 Dashboard -> Instances Ta thấy đã có 1 instance mới được tạo với status running. Instance name giống với Tag name ta tạo trong ASG
Kiểm tra Target Groups
Bạn có thể xác minh số lượng Instance trong Target Groups để đảm bảo rằng chúng khớp với số lượng mong muốn được đặt trong desired capacity.
Mở Target group TG-group-Demo-ASG
ta vừa tạo ở trên để xem.
Ta thấy có 1 target và 1 Unused. Điều này là Do Load balancer ta chưa trỏ tới Targer group này.
Bây giờ ta sẽ add Target group TG-group-Demo-ASG
vào Load balancer ta tạo ở trên bằng cách:
- Chọn Load Balancers -> Chọn listener
- Chọn listener Rule -> Edit Actions
- Set Target group thành
TG-group-Demo-ASG
- Confirm bằng cách bấm
Save Changes
Quay lại Target group TG-group-Demo-ASG
ta sẽ thấy có 1 Initial
Chờ 1 chút để health check chạy thì ta sẽ thấy có 1 Healthy
Kiểm Tra Auto Scaling
1. Tăng tải thủ công:
- Sử dụng EC2 Stress Test Tool để tăng tải CPU trên các EC2 instances. Bạn có thể tham khảo ở đây: https://docs.aws.amazon.com/fis/latest/userguide/fis-tutorial-run-cpu-stress.html
- Theo dõi Auto Scaling Group trong AWS Management Console để thấy số lượng instances tăng lên.
Cài đặt EC2 Stress Test Tool bằng lệnh sau:
sudo dnf install stress -y
Bắt đầu stress Ec2 instance:
stress --cpu 4 --timeout 300
# stress: info: [2780] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
Giải thích:
- --cpu 4: tăng load lên tới 4 CPU cores
- --timeout 300: chỉ định thờig gian tăng load trong 300 giây (5 phút)
Mở Monitoring tab ở AWS Instance bạn sẽ thấy mục CPU utilisation sẽ đạt ngưỡng 100%
Số lượng instance đã tăng lên 2
Target group đã có 2 target healthy
Tiếp tục mở Auto scaling group tab Activity ta thấy có thêm 1 mục khởi tạo Instane mới
Bạn cũng có thể xem Alarm trong Cloudwatch
2. Giảm tải:
- Giảm tải CPU và theo dõi số lượng instances giảm dần về trạng thái mặc định.
Lưu ý: Ví dụ lúc đầu bạn để Desired capacity
= 1. Nếu có scale out tăng instance lên 2 thì cũng đồng thời gán Desired capacity
thành 2.
Kết Luận
EC2 Auto Scaling là một công cụ mạnh mẽ để quản lý tài nguyên linh hoạt trên AWS. Với bài hướng dẫn này, bạn đã có thể tự cấu hình và triển khai Auto Scaling cho ứng dụng của mình, tối ưu hóa chi phí và duy trì hiệu suất.
Mở Rộng
- Scheduled Scaling: Thiết lập lịch trình tăng/giảm số lượng instances vào các thời điểm cố định.
- Predictive Scaling: Sử dụng AI để dự đoán lưu lượng truy cập và tự động mở rộng trước khi nhu cầu tăng cao.
- Monitoring: Kết hợp với AWS CloudWatch để theo dõi và tối ưu hóa hoạt động của Auto Scaling Group bao gồm các Alarm