Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Published on
Published on

Hướng dẫn cài đặt EC2 Autoscaling Kết hợp Load balancer trên AWS

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.

Target group for auto scaling

Lúc này Target group ta tạo sẽ có:

  • 0 targets
  • 0 Healthy
  • 0 Unhealthy

Target group for auto scaling

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.

  1. 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).
  1. 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

  1. 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 .

Create AWS 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ấn Create Image

Create AWS 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.

  1. Truy cập AWS EC2 Dashboard -> Launch Templates -> Nhấn Create Launch Template .
  2. 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

Create AWS Image

Create AWS Image

  1. Nhấn Create Launch Template .

Create AWS Image

  1. 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.

Create AWS Image

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

Create AWS Image

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:

Create AWS Image

  • 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

Create AWS Image

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

Create AWS Image

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

Create AWS Image

Application Recovery Controller

Ở mục này ta để mặc định

Create AWS Image

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

Create AWS Image

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

Create AWS Image

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.

Create AWS Image

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.

Create AWS Image

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

Create AWS Image

Instance maintenance policy

  • Capacity Reservation preference: chọn Default (Auto scaling sẽ sử dụng tùy chọn Capacity Reservation từ Launch template)

Create AWS Image

Additional settings

Ở đây bạn có thể cho phép tracking lịch sử trên Cloudwatch để tiện theo dõi.

Create AWS Image

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

Create AWS Image

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

Create AWS Image

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.

Create AWS Image

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

Create AWS Image

  • Chọn listener Rule -> Edit Actions

Create AWS Image

  • Set Target group thành TG-group-Demo-ASG

Create AWS Image

  • 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

Create AWS Image

Chờ 1 chút để health check chạy thì ta sẽ thấy có 1 Healthy

Create AWS Image

Kiểm Tra Auto Scaling

1. Tăng tải thủ công:

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%

EC2 CPU Monitoring

Số lượng instance đã tăng lên 2

EC2 CPU Monitoring

Target group đã có 2 target healthy

EC2 CPU Monitoring

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

EC2 CPU Monitoring

Bạn cũng có thể xem Alarm trong Cloudwatch

EC2 CPU Monitoring

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