ทดลองใช้ Auto Scaling ใน EC2

2022.05.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ก่อนเริ่มบทความ

เนื้อหาในบทความนี้ประกอบไปด้วยเนื้อหาที่มีความซับซ้อนในระดับนึง
จึงอาจจะมีบางส่วนที่ไม่สามารถอธิบายได้หมดในบทความนี้
ทางผู้เขียนแนะนำให้ผู้อ่านทำความเข้าใจเนื้อหาด้านล่างต่อไปนี้ก่อนอ่านบทความนี้
【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ

สิ่งที่จะทำในบทความนี้


สวัสดีครับ ผม ต้า ครับ
วันนี้เราจะมาลองใช้เครื่องมือใน EC2 ที่มีชื่อว่า Auto Scaling กันครับ
Auto Scaling จะช่วยให้เราสร้าง instance ขึ้นอัตโนมัติตามที่เราตั้งค่า
โดยสามารถใช้ได้ในกรณีที่ instance มีปัญหาต่างๆเช่น ถูก Terminated
หรือเพิ่มจำนวน instance ขึ้นเพื่อจัดการปัญหา Traffic ที่มีจำนวนมาก
หรือในทางกลับกันคือลดจำนวน instance เมื่อมี Traffic จำนวนน้อย
โอเคครับ งั้นเรามาเริ่มทำกันเลยครับ

ขั้นตอนการทดลองโดยรวม
1.สร้าง VPC
2.สร้าง EC2 Master กับ ตั้งค่าข้างใน OS
3.สร้าง AMI กับ สร้าง Launch Template
4.สร้าง Auto Scaling Group กับเปลี่ยนการตั้งค่า ELB
5.ตรวจสอบผลการทดลอง

1.สร้าง VPC

ในขั้นตอนแรกเราจะมาสร้าง VPC ให้ได้ตามรูปด้านบนกันก่อนนะครับ
โดยวิธีการสร้าง VPC สามารถดูได้ที่ลิ้งค์ด้านล่างนี้ครับ↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ

การสร้าง VPC Beginner
Name tag auto-generation: supanut-test (ตั้งชื่อของ VPC อะไรก็ได้)
IPv4 CIDR block: 192.168.0.0/16
Availability Zones (AZs) (2): 1a 1b
Number of public subnets: 2
Number of private subnets: 0
Public subnet CIDR block in ap-southeast-1a: 192.168.1.0/24
Public subnet CIDR block in ap-southeast-1b: 192.168.2.0/24
NAT gateways: None
VPC endpointsInfo: None
Enable DNS hostnames: ✅
Enable DNS resolution: ✅

ตั้งค่าเสร็จแล้วก็กด Create VPC ได้เลยครับ

ตั้งค่า Subnet

หลังจากนั้นให้ไปที่ฟังก์ชันSubnets
แล้วให้ตั้งค่า Public Subnet ทั้ง public1 และ public2 ให้ ✅Enable auto-assign public IPv4 address
เราสามารดูวิธีตั้งค่า Public Subnet ได้ตามบทความด้านล่างนี้ครับ↓↓↓

วิธีตั้งค่า Public Subnet

2.สร้าง EC2 Instance ตัว Master

โดยขั้นตอนต่อไปเราจะสร้าง EC2 Instance ที่เป็น template ไว้สำหรับ AMI และหลังจากนั้นให้เชื่อมต่อ PuTTY ด้วย
โดยสามารถดูวิธีการสร้างและเชื่อมต่อได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ (นอกนั้นให้เหมือนในบทความได้เลยครับ)

【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
Name:supanut-test-ec2-m(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Subnet:public1(ตามแผนภาพที่ร่างไว้↑↑↑)
Auto-assign public IP:Enable
Security group name:supanut-test-ec2(จะลองให้ทั้ง 2 Instance ใช้ Security group เดียวกัน)
Description:supanut-test-ec2
Security group rule 1
Type:ssh
Source type:My IP
Security group rule 2
Type:HTTP
Source type:Anywhere
Key pair: supanut-test-ec2

เสร็จแล้วกดLaunch instanceเลยครับ
แล้วให้เราเชื่อมต่อ PuTTY ตามบทความด้านบนทุกอย่างเลยครับ
และใช้คำสั่งนี้เพื่ออัพเดทข้อมูลให้เป็นเวอร์ชั่นล่าสุด

yum update -y

หลังจากนั้นใช้เราใช้คำสั่งนี้เพื่อเปลี่ยน Time zone เป็นเวลาไทยครับ

ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime

แล้วใช้คำสั่งนี้เพื่อเช็คดูเวลาได้ หากถูกต้องเวลาจะเป็น +07 ครับ

date

และหลังจากนั้นให้เรา Install PHP 8.0 และ Apache EC2 Instance ตามคำสั่งด้านล่างนี้ครับ

amazon-linux-extras install -y php8.0

ตรวจสอบเวอร์ชั่น php

php -v

ติดตั่ง Apache

yum install httpd -y

เริ่มต้นระบบ Apache

systemctl start httpd

ตั้งค่าเริ่มต้นระบบ Apache อัตโนมัติด้วยคำสั่งนี้ ถ้าไม่ทำการตั้งค่าคำสั่งนี้ Apache ก็จะหยุดทำงานหลังจากที่ Start และ Stop Instance

systemctl enable httpd.service

ตรวจสอบเวอร์ชั่น httpd(Apache)

httpd -v

เรียกใช้คำสั่งนี้เพื่ออัพโหลดไฟล์ที่จะใช้แสดงหน้าเว็บไซต์

chmod 777 /var/www/html/

แล้วเรียกใช้คำสั่งนี้ เพื่อไปยัง address /var/www/html/

cd /var/www/html/

แล้วเรียกใช้คำสั่งนี้ เพื่อสร้างไฟล์ index.php

vi index.php

กดปุ่ม i เพื่อเข้าสู่โหมดเขียน แล้วเพิ่มคำนี้ลงไป

<?php phpinfo();


แล้วกด Esc แล้วพิม :x แล้วกด Enter เพื่อ save file

3.สร้าง AMI

หลังจากที่เราInstall PHP 8.0 และ Apache EC2 Instance เสร็จแล้ว เราจะมาใช้ฟังก์ชันของ EC2 ที่เรียกว่า AMIs ในการสร้าง Copy การตั้งค่า ของ Instance เพื่อนำไปใช้ใน Auto Scaling
โดยสามารถดูวิธีการสร้างได้ที่ลิ้งค์ด้านล่างนี้↓↓↓

การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
Image name: supanat-test-ec2-ami
Tag: Name supanat-test-ec2-ami
เมื่อเราสร้างเสร็จแล้ว ไม่จำเป็นต้องใช้ AMI ไปสร้าง Instanceตัวใหม่นะ

เมื่อสร้าง AMI เสร็จแล้ว ให้ไปขั้นตอนต่อไปได้เลยครับ

4.สร้าง launch template

ในหน้าเว็บ EC2 Service ให้เราคลิกเข้าไปที่ฟังก์ชัน Launch Templates

แล้วกด Create launch template ครับ

จากนั้นให้เราตั้งค่าตามนี้
name:supanut-test-launch-template
description:supanut-test-launch-template
Auto Scaling guidance:✅Provide guidance to help me...
Application and OS Images: My AMIs (และเลือก AMI ที่เราสร้าง)
Instance type: t3a.nano
Key pair: supanut-test-ec2(ใช้ตัวเดียวกับ Master)
Subnet: Don't include in launch template(ที่ไม่ต้องตั้งค่าเนื่องจากเราต้องการให้สร้าง Instance ทั้ง 2 available zone)
Security Group: supanut-test-ec2




เสร็จแล้วให้กดปุ่มCreate launch templateได้เลยครับ

5.สร้าง Auto Scaling Group

ในหน้าเว็บ EC2 Service ให้เราคลิกเข้าไปที่ฟังก์ชัน Auto Scaling Groups

แล้วกด Create Auto Scaling group ครับ

แล้วให้เราตั้งค่าตามนี้ครับ
name:supanut-test-auto-scaling-group
Launch template:supanut-test-launch-template

แล้วกดปุ่มNextครับ

VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้วๆ
Availability Zones and subnets:1a 1b(เลือกทั้งสอง)

แล้วกดปุ่มNextครับ

หน้านี้เป็นหน้าที่เราจะใส่ALBโดยเราสามารถนำALBที่สร้างก่อนหน้านี้มาใช้ก็ได้
หรือจะสร้างALBที่หน้านี้เลยก็ได้ โดยในการทดลองนี้ ผมจะสร้างในหน้านี้ครับ
Load balancing:◎Attach to a new load balancer
Load balancer name:supanut-test-alb
Load balancer scheme:Internet-facing
Default routing:Create a target group
New target group name:supanut-test-target-group



แล้วกดปุ่มNextครับ

ในหน้านี้เราจะสามารถตั้งค่าจำนวน Instance ที่จะสร้างขึ้นจาก Auto Scaling ได้
แต่เพื่อไม่ให้เป็นการยุ่งยากครั้งนี้เราจะตั้งค่าแบบง่ายๆกันก่อนครับ
Group size
Desired capacity:2
Minimum capacity:2
Maximum capacity:2
Scaling policies:◎None

แล้วกดปุ่มNextไปเรื่อยๆ จนถึงCreate Auto Scaling groupเลยครับ

จากนั้นให้เราไปเช็ค Auto Scaling groups Load Balancers Target Groups
ว่ามีอะไรถูกสร้างตามการตั้งค่าของเราแล้วรึยัง
แล้วให้เราไปที่Instancesจะพบว่ามีInstanceถูกสร้างขึ้นตามที่เราตั้งค่าไว้

6.สร้าง Security Group สำหรับ ALB

เมื่อเราสร้าง Auto Scaling สำเร็จ แล้วเรานำ DNS name ของ ALB ไปเปิดจะพบว่าไม่สามารถเข้าใช้งานเว็บไซต์ได้

นั่นเป็นเพราะว่าเรายังไม่ได้ตั้งค่า Security Group สำหรับ ALB นั่นเอง
ให้เราไปยังหน้า Security Groups ใน EC2 Service
กดปุ่มสีส้มๆ Create security group
ตั้งค่าตามนี้ครับ
Security group name: supanut-test-alb(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
Description: supanut-test-alb(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Inbound rules
กด Add rule
Type: HTTP
Source: Anywhere-IPv4

แล้วให้เราไปที่หน้าLoad Balancersครับ

เลือก Load Balancer ที่เราสร้างขึ้น
แล้วเลือกEdit security groups

แล้วเลือกsecurity group ที่เราสร้างขึ้น

แค่นี้เราก็จะสามารถเข้าใช้เว็บไซต์ผ่านDNS nameได้แล้วครับ

7.ทดสอบ Auto Scaling

ให้เรา Terminate instance ที่สร้างขึ้นจาก Auto Scaling ดูครับ

แล้วให้เราไปที่ Target Group แล้วเช็คดูจะพบว่าเรา Terminate ไปแล้วแต่ว่ายังเป็น Healthy อยู่

และเมื่อเรากลับมาดูที่หน้า Instances อีกทีจะพบว่ามี Instance ถูกสร้างขึ้นใหม่จาก Auto Scaling มาอีก

และนี่ก็เป็นเพราะ Auto Scaling จะคอยตรวจสอบว่า EC2 เป็นไปตามเงื่อนไขที่ตั้งค่าไว้ไหม
หากไม่ตรงตามเงื่อนไขก็จะปรับค่าให้ตรงตามเงื่อนไข โดยในกรณีนี้คือการเปิดใช้งาน Instance ให้ครบ 2 ตัวนั่นเอง
เมื่อเราทดสอบเสร็จ ให้เราไปตั้งค่า Security Group ของ Instance(ในที่นี้ของผมคือ supanut-test-ec2)
ให้เราเปลี่ยนในส่วนของ source ของ HTTP เป็น IP ของ VPC(ในที่นี้ของผมเป็น 192.168.0.0/16)
เพียงแค่นี้เราก็จะสามารถป้องกันการเชื่อมต่อจากภายนอกที่ผ่านมาทาง IP ของ Instance ได้
และทำให้DNS nameของ Target Group เป็นประตูเดียวที่สามารถเข้าใช้เว็บไซต์จากภายนอกได้

8.วิธีการลบสิ่งที่สร้างขึ้นในการทดลองครั้งนี้

เนื่องจากไม่ว่าเราจะ Terminate Instance ยังไง Instance ก็จะถูกสร้างขึ้นใหม่จาก Auto Scaling อยู่ดี
ทำให้ต้องมีขั้นตอนในการลบ เพื่อลบทุกอย่างที่เราสร้างขึ้นมาในการทดลองครั้งนี้
โดยให้เราเริ่มตามนี้
ลบ ELB

ลบ Target Group

ลบ Auto Scaling Group

ลบ Launch Templates

ลบ AMI

ลบ Snapshot

เช็คว่า Instance ที่เกิดจาก Auto Scaling ถูกลบ แล้วให้ลบsupaunt-test-ec2-m

ลบ Security Group

ลบ KeyPair

ลบ VPC

สรุป

Auto Scaling เป็นเครื่องมือของ EC2 ที่สามารถปรับเปลี่ยนเพิ่มลดจำนวนของ Instance ได้โดยอัตโนมัติ
เมื่อเรา Terminate Instance แล้วหากเรายังเปิดใช้งาน Auto Scaling อยู่ ตัว Instance จะถูกสร้างใหม่
อัตโนมัติตามที่เราตั้งค่า โดยในขั้นต่อไปคุณสามารถตั้งค่า Auto Scaling ในแบบอื่นอีกได้
เช่น เมื่อ CPU ถูกใช้งานเกิน 50% คุณจะ .... โดยสามารถศึกษาเพิ่มเติมได้ที่
Amazon EC2 Auto Scaling

บทความที่เกี่ยวข้อง

AWS Auto Scaling คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ