Tạo Auto Scaling Group bằng cách sử dụng Command Line Interface

1653
01-11-2021
Tạo Auto Scaling Group bằng cách sử dụng Command Line Interface

Làm thế nào để tạo Auto Scaling Group bằng cách sử dụng Command Line Interface? Trong bài viết dưới đây, Bizfly Cloud sẽ chia sẻ các bước thực hiện việc tạo Auto Scaling Group vô cùng đơn giản. Hãy cùng theo dõi những thông tin chi tiết ngay nhé!

Use Case:

Công ty của bạn có web server có mức lưu lượng truy cập không ổn định. Công ty của bạn phải đảm bảo rằng các web server luôn sẵn sàng và có một số lượng tiến trình cố định để đảm bảo rằng ngay cả ở mức Sử dụng CPU tối đa, máy chủ web vẫn có thể hoạt động. Vấn đề là khi lưu lượng truy cập thấp, web server không được sử dụng sẽ gây tốn kém một cách không cần thiết cho công ty. Cách để có một số lượng tiến trình cố định cũng gây ra vấn đề nếu vì lý do nào đó mà web server gặp sự cố và một server mới phải được khởi động theo cách thủ công.

Tạo Auto Scaling Group bằng cách sử dụng Command Line Interface - Ảnh 1.

Để giải quyết vấn đề này, chúng ta sẽ tạo Auto Scaling Group với chính sách Theo dõi mục tiêu (Target Tracking) để mở rộng quy mô tùy thuộc vào nhu cầu với tối thiểu 2 tiến trình và tối đa là 5 tiến trình.

Command Line Interface (CLI) là gì?

CLI là một công cụ mã nguồn mở cho phép bạn sử dụng các lệnh để tương tác với các dịch vụ. CLI có thể sử dụng dễ dàng, thuận tiện và hiệu quả hơn so với việc sử dụng Bảng điều khiển (Console). Thay vì điều hướng từ các dịch vụ bằng Graphical User Interface (GUI), người dùng có thể tiết kiệm thời gian bằng cách gõ lệnh để thực hiện các tác vụ của họ. CLI cũng cung cấp cho bạn khả năng tự động hóa bằng các tập lệnh, điều này sẽ giúp bạn tiết kiệm thời gian về lâu dài.

IAM User

Đối với project này, chúng ta sẽ cần một người dùng có quyền truy cập có lập trình và bảng điều khiển.

1. Điều hướng đến IAM.
2. Nhấp vào Users.
3. Nhấp vào Add user.
4. Đối với Add user: 

  • User name: Tạo User name
  • Access type: Chọn Programmatic access and Management Console access
  • Console password: Chọn mật khẩu tùy chỉnh 
  • Require password reset: bỏ chọn "User must create a new password" ở lần đăng nhập tiếp theo

5. Nhấp vào Next.
6. Bỏ qua thêm người dùng vào một nhóm. Nhấp vào Next.
7. Không thêm bất kỳ tag nào. Nhấp vào Next.
8. Nhấp vào Create user.
9. Chúng ta sẽ cần Access key ID và Secret access key, vì vậy hãy nhấp vào nút Download.csv .

Quyền của IAM User

Hiện tại người dùng mới không có quyền. Chúng ta có thể cấp quyền trực tiếp cho nó nhưng điều đó đi ngược lại các best practice. Thay vào đó, chúng ta sẽ tạo một nhóm với Full Access và thêm người dùng mới vào nhóm đó.

  1. Trong IAM, nhấp vào User Group. Sau đó nhấp vào Create group.
  2. Đối với User group name, hãy tạo một tên thích hợp (Tạm gọi là Developers).
  3. Trong phần Add users to the group, hãy chọn user mới.
  4. Trong phần Attach permissions policies, tìm kiếm trong Policy và chọn FullAccess.
  5. Nhấp vào Create group.

Người dùng mới hiện có toàn quyền truy cập thông qua bảng điều khiển và CLI.

Cài đặt CLI

1. Cài đặt PIP

$ sudo dnf install python3-pip

2. Cài đặt CLI

$ pip3 install cli --upgrade --user

3. Xác minh cài đặt CLI

$ --version

4. Configure CLI.

$ configure

5. Tham chiếu tệp .csv được tải xuống khi chúng ta tạo người dùng mới.

  • Nhập Access Key ID rồi nhấn Enter
  • Nhập Secret Access Key rồi nhấn Enter
  • Đối với Default region name, hãy nhập us-east-1 rồi nhấn Enter
  • Để trống định dạng Default output rồi nhấn Enter

6. Nếu không có output thì giả sử không có vấn đề gì với việc thiết lập cấu hình CLI.

Tạo Security group

Chúng ta sẽ cần một Security Group cho tiến trình sẽ cho phép HTTP từ 0.0.0.0/0 để chúng ta có thể truy cập trang web của mình.

1. Chạy lệnh sau để tạo Security group có tên SG-WebServer .

$ aws ec2 create-security-group --group-name SG-WebServer

--description "WebServer security group"

2. Sau khi lệnh chạy thành công, GroupId cho Security group sẽ được xuất ra. Hãy ghi lại GroupId vì chúng ta sẽ cần nó sau này.

3. Chạy lệnh sau để cập nhật các quy tắc đến cho Security group. Đảm bảo thay thế cho GroupId từ bước cuối cùng.

$ aws ec2 authorize-security-group-ingress --group-id <SecurityGroupID> --protocol tcp --port 80 --cidr 0.0.0.0/0

Tạo tiến trình

1. Tạo một tệp có tiêu đề UserData.txt chứa các lệnh bên dưới.

$ aws ec2 create-security-group --group-name SG-WebServer

--description "WebServer security group"

2. Chạy lệnh dưới đây để tạo một tiến trình với các thuộc tính sau:

  • Image-id: ami-0742b4e673072066f (Linux 2 AMI)
  • Count: 1
  • Tags: Key: Name, Value: MyInstance
  • SecurityGroup: SG-WebServer

Hãy nhớ thay thế bằng Security Group Id của bạn.

$ aws ec2 run-instances --image-id ami-0742b4e673072066f --count 1 --instance-type t2.micro --tag-specifications 'ResourceType=instance, Tags=[{ Key=Name,Value=MyInstance}]' --security-group-ids <SecurityGroupId> --user-data file://UserData.txt

3. Sau khi chạy thành công lệnh run-instance, output sẽ là một mẫu json với thông tin tiến trình mới.

4. Để xác nhận rằng instance đã được tạo, chúng ta sẽ liệt kê các tiến trình lọc theo Tag.

$ aws ec2 description-instances --filters "Name = tag: Name, Values = MyInstance" --query "Reservations []. Instances []. InstanceId"

5. Bạn sẽ thấy tương tự như hình dưới đây:

6. Bây giờ chúng ta cần xác minh rằng trang web đang hoạt động. Chạy lệnh dưới đây để tìm Public IP của tiến trình. Thay thế cho Instance Id.

$ aws ec2 description-instance --instance-ids <instance id> --query 'Reservations [*]. Instances [*]. PublicIpAddress' --output text

7. Bây giờ chúng ta đã có Public IP, hãy sử dụng lệnh curl để xem liệu trang web của chúng ta có hoạt động hay không.

$ curl <Public IP>

Bạn có thể thấy từ output rằng trang web đang hoạt động.

Tạo Launch Template

Chúng ta sẽ cần tạo Launch Template cho Auto Scaling Group với cấu hình tương tự như tiến trình mà chúng ta đã khởi chạy trước đó. Chúng ta có thể sử dụng cùng một thông tin cho Launch Template như AMI, Instance Type, chỉ định Security Group và thêm User Data. Vì chúng ta đã trải qua tất cả các công việc trong các bước trước, tại sao không chỉ tạo một Image của tiến trình hiện tại và sử dụng nó làm AMI của chúng ta?

1. Chạy lệnh sau để tạo AMI của phiên bản hiện tại của chúng ta.

$ aws ec2 create-image --instance-id <Instance Id> --name ASGCLI

2. Lưu ImageId trong một tệp riêng biệt hoặc notepad để sử dụng sau này.

3. Tạo Launch Template bằng AMI. Lệnh dưới đây sẽ đặt Security Group, đặt Instance Type, đặt Tag và Region.

$ aws ec2 create-launch-template \

--launch-template-name TemplateWebServer \

--version-description AutoScalingVersion1 \

--launch-template-data '{"NetworkInterfaces":[{"DeviceIndex":0,"AssociatePublicIpAddress":true,"Groups":["sg-08d4e7f2321254357"],"DeleteOnTermination":true}],"ImageId":"ami-04b81c294769991d8","InstanceType":"t2.micro","TagSpecifications":[{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"WebServerASG"}]}]}' --region us-east-1

4. Output sẽ tương tự như hình dưới đây nếu thành công:

Tạo Auto Scaling Group

1. Để tạo Auto Scaling Group, hãy chạy lệnh sau:

$ aws autoscaling create-auto-scaling-group --auto-scaling-group-name WebServerASG --launch-template "LaunchTemplateName=TemplateWebServer" --min-size 2 --max-size 5 --desired-capacity 2 --availability-zones "us-east-1a" "us-east-1b" "us-east-1c"

2. Lệnh này đặt Launch Template, kích thước tối thiểu là 2, kích thước tối đa là 5 và đặt các AZ mong muốn.

3. Bây giờ hãy chạy lệnh sau để liệt kê tất cả các trường hợp có Name: WebServerASG.

$ aws ec2 describe-instances --filters "Name=tag:Name,Values=WebServerASG" --query "Reservations[].Instances[].InstanceId"

Sau khi tạo thành công Auto Scaling Group bằng CLI, hãy kiểm tra để đảm bảo mọi thứ đang hoạt động như bình thường.

Kiểm tra trang web

1. Để kiểm tra xem trang web đã hoạt động chưa, chọn một trong hai Instance Id để sử dụng và chạy lệnh sau để lấy địa chỉ Public IP.

$ aws ec2 describe-instances --instance-ids <instance id> --query 'Reservations[*].Instances[*].PublicIpAddress' --output text

2. Tiếp theo sử dụng lệnh curl để xem trang web đã lên chưa.

curl <Public IP>

3. Bạn sẽ nhận được một output tương tự như hình dưới đây:

Kiểm thử Auto Scaling

Hãy kiểm thử Auto Scaling Group bằng cách xóa hai tiến trình.

1. Chạy lệnh sau, thay thế cho các tiến trình của bạn.

$ aws ec2 terminate-instances --instance-ids "<Instance Id>"\

"<Instance Id>"

2. Bây giờ, hãy chạy lệnh sau để liệt kê tất cả các trường hợp đang chạy với Tag Name WebserverASG.

$ aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Name,Values=WebServerASG" --query "Reservations[].Instances[].InstanceId"

3. Bạn sẽ thấy hai tiến trình mới, chứng tỏ rằng Auto Scaling Group đang hoạt động chính xác và đã thêm hai tiến trình mới để đáp ứng các yêu cầu tối thiểu.

Clean Up

1. Xóa tiến trình ban đầu.

$ aws ec2 terminate-instances --instance-ids "<Instance Id>"

2. Xóa Auto Scaling Group và vì chúng ta có các tiến trình đang chạy, nên sẽ cần bắt buộc xóa.

$ aws autoscaling delete-auto-scaling-group --auto-scaling-group-name WebServerASG --force-delete

3. Khi liệt kê các tiến trình đang chạy của mình, chúng ta sẽ không lấy lại bất kỳ thứ gì ngoại trừ dấu ngoặc trống []. Lưu ý: nếu bạn có các tiến trình khác đang chạy bên ngoài những tiến trình chúng ta đã tạo thì chúng sẽ được liệt kê.

$ aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query "Reservations[].Instances[].InstanceId"

4. Xóa Launch Template

$ aws ec2 delete-launch-template --launch-template-name TemplateWebServer

5. Xóa AMI Image.

$ aws ec2 deregister-image --image-id <AMI Id>

6. Xóa test user mà chúng ta đã tạo. Có thể sử dụng Bảng điều khiển

Trên đây toàn bộ các bước hướng dẫn chi tiết cách tạo nhóm Auto Scaling bằng cách sử dụng Command Line Interface vô cùng đơn giản. Chúc các bạn thực hiện thành công và đừng quên cập nhật những thông tin, kiến thức bổ ích tại Bizfly Cloud nhé!

TAGS: auto scaling
SHARE
Hỗ trợ kỹ thuật
Kinh doanh, CSKH