[Update] การตั้งค่า ELB (ALB) และ Auto Scaling Group ใน Elastic Beanstalk
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำเกี่ยวกับการตั้งค่า ELB (ALB) และ Auto Scaling Group ใน Elastic Beanstalk
สำหรับชื่อทางการคือ
ELB =Elastic Load Balancing
ALB =Application Load Balancer
สิ่งที่ต้องมี
※สร้าง Application ใน Elastic Beanstalk แล้ว
ตัวอย่างในบทความนี้ สมมติว่าผมสร้าง Application โดยใช้ชื่อดังนี้
Application:tinnakorn
สร้าง Environment สำหรับ ELB (ALB)
ก่อนอื่นผมจะสร้าง Environment โดยตั้งค่าการใช้งาน ELB (ALB)
ตัวอย่างในบทความนี้ ผมจะสร้าง Environment โดยใช้ชื่อดังนี้
Environment:tinnakorn-loadbalancer
ดูตัวอย่างเพิ่มเติมได้ที่ลิงก์บทความและตัวอย่างตาม Step ด้านล่างนี้ (สำหรับผู้ใช้งานที่รู้วิธีการสร้าง Environment อยู่แล้วข้ามขั้นตอนนี้ไปได้เลย)
ครั้งนี้จะสร้าง Environment โดย Deploy Laravel ใน Elastic Beanstalk และเชื่อมต่อกับ RDS ดังนี้
Step 1: Configure environment
หัวข้อ Environment information
・Environment name:tinnakorn-loadbalancer
(ชื่ออะไรก็ได้)
・Domain:tinnakorn-loadbalancer
(ชื่ออะไรก็ได้)หัวข้อ Platform
・Platform:PHP
หัวข้อ Application code
・เลือกวิธีอัปโหลดไฟล์ตามต้องการ (ครั้งนี้จะใช้โปรเจกต์ Laravel)・คลิก
Next
Step 2: Configure service access
หัวข้อ Service access
・Service role:Use an existing service role
・Existing service roles:aws-elasticbeanstalk-service-role
・EC2 key pair:tinnakorn-loadbalancer
・EC2 instance profile:aws-elasticbeanstalk-ec2-role
・คลิกNext
Step 3 - optional: Set up networking, database, and tags
Step นี้ระบุว่า "optional" จึงไม่จำเป็นต้องตั้งค่าอะไร เพราะเป็นการทดสอบการใช้งาน ให้คลิก
Next
ได้เลย
**ตั้งแต่ขั้นตอนนี้ไปจะแตกต่างจากตัวอย่างในบทความข้างต้น**
Step 4 - optional: Configure instance traffic and scaling
Step นี้ระบุว่า "optional" แต่จะตั้งค่าเพิ่มเติมดังนี้
หัวข้อ Instances
Root volume (boot device):
・Root volume type: General Purpose (SSD)
・Size: 10
GB (ขั้นต่ำคือ 10 GB)
แล้วค้นหาและเลือก EC2 security groups สำหรับ Elastic Beanstalk ที่สร้างในตอนแรก เช่น tinnakorn-loadbalancer
หัวข้อ Capacity
Auto scaling group
・Environment type: Load balanced
Instances: 2
Min, 2
Max (ครั้งนี้จะล็อกจำนวน Instance อยู่ที่ 2 ตัว)
Scaling triggers
Lower threshold: 0
capacity
หัวข้อ Load Balancer Type
เลือก Application load balancer
หัวข้อ Processes
・ติ๊ก ✅
default
・คลิก Actions
และเลือก Edit
สิ่งที่จะทำต่อไปนี้คือการล็อกปลายทาง EC2 Instance ที่จะเชื่อมต่อโดยใช้ข้อมูลจาก Cookie ที่ฝังใน HTTP response ด้วย ELB ครับ ซึ่งอาจไม่ต้องทำก็ได้ แต่เพื่อให้แอปพลิเคชันทำงานได้อย่างปลอดภัย แนะนำให้ทำตามขั้นตอนดังนี้
・คลิก ▶ Sessions
เพื่อขยายหน้าจอ Session stickiness
・ติ๊ก ✅
Enabled ที่ Session stickiness
・คลิก Save
แล้วช่อง Stickiness จะเปลี่ยนเป็น Enabled
แล้วเลื่อนลงมาด้านล่างสุดและคลิก Next
Step 5 - optional: Configure updates, monitoring, and logging
ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: Step 5 - optional: Configure updates, monitoring, and logging
Step 6: Review
ตรวจสอบการตั้งค่าตั้งแต่ "Step 1 - Step 5" แล้วคลิก Submit
ด้านล่างสุด แล้วรอสักครู่
ระหว่างที่ระบบกำลังเริ่มต้นจะมีสถานะเป็น [Unknown
→ Pending
→ OK
] เมื่อระบบเริ่มต้นเสร็จแล้วจะแสดงหน้าจอแบบนี้ โดยมี Domain ที่เป็นลิงก์สำหรับแสดงผลหน้าไซต์ และมี Running version เป็นชื่อตามที่ป้อนตอนอัปโหลดไฟล์ ZIP
ตรวจสอบสภาพแวดล้อมหลังจากสร้าง Environment
ก่อนอื่นเรามาทำการตรวจสอบเว็บไซต์ที่สร้างขึ้นมาก่อนครับ (เว็บไซต์ Laravel นี้เป็นแค่ตัวอย่าง)
ตรวจสอบหน้าเว็บไซต์โปรเจกต์
เมื่อระบบ Update เสร็จแล้วจะแสดงหน้าจอแบบนี้ จากนั้นคลิกลิงก์ Domain
เพื่อตรวจสอบหน้าเว็บไซต์ได้เลย
แล้วจะแสดงหน้าหลัก (Home page) แบบนี้
Load Balancers
ช่วงเวลาที่ผมสร้าง ELB (ALB) ใน Elastic Beanstalk โดยประมาณคือ May 2, 2024, 16:58 (UTC+07:00)
หลังจากเริ่มต้นระบบเสร็จแล้ว เราจะได้สภาพแวดล้อมตามที่สร้างใน Elastic Beanstalk ดังนี้
เข้ามาที่ [Amazon EC2 > Load Balancers] จะเห็นว่าเราได้ Load Balancers มาแล้ว
Auto Scaling Groups
เข้ามาที่ [Amazon EC2 > Auto Scaling Groups] จะเห็นว่าเราได้ Auto Scaling Groups มาแล้ว
Instances
เข้ามาที่ [Amazon EC2 > Instances] จะเห็นว่าเราได้ Instances มาแล้ว ซึ่งในส่วนนี้เราจะได้ Instances มา 2 ตัวตามที่ตั้งค่าไว้ใน Elastic Beanstalk เมื่อสักครู่นี้ครับ
เชื่อมต่อ Server EC2
เราสามารถเชื่อมต่อ Server EC2 จาก EC2 อื่นหรือจากโปรแกรมอื่นได้
เชื่อมต่อ Server EC2 จาก EC2 อื่น
การเชื่อมต่อ Server EC2 จาก EC2 อื่นโดยใช้ Public IPv4 address
และ Private IPv4 addresses
ของ EC2 ที่ต้องการเชื่อมต่อ
ดูตัวอย่างได้ที่ลิงก์ด้านล่างนี้
เชื่อมต่อ Server EC2 จากโปรแกรมอื่น
การเชื่อมต่อ Server EC2 จากโปรแกรมอื่น เช่น PuTTY และ VSCode มีดังนี้
การเชื่อมต่อ Server EC2 ด้วย PuTTY
ดูตัวอย่างที่นี่: การเชื่อมต่อกับ EC2 Instance ด้วย PuTTYการเชื่อมต่อ Server EC2 ด้วย VSCode
ดูตัวอย่างที่นี่: ทำการติดตั้ง Extention Remote – SSH ใน VSCode และทดลองใช้งาน EC2 โดยตรงใน VSCode
ทดสอบ Auto Scaling
มาที่ EC2 instance แล้ว Terminate instance ที่สร้างขึ้นจาก Auto Scaling ครับ
เมื่อทำการ Terminate Instance เสร็จแล้ว ให้เข้าไปที่หน้า Target Groups ของ Elastic Beanstalk จะพบว่ามีจำนวน Healthy Instance อยู่ 1
ตัว เราจึงยังสามารถเข้าใช้เว็บไซต์ได้ตามปกติ เนื่องจาก ELB ยังมี Instance ที่ทำงานเหลืออยู่ 1 ตัว และได้นำ Instance ที่ถูก Terminate ออกจากการ Target Groups แล้วจะสร้าง Instance ตัวใหม่มาแทนที่ตัวที่ถูก Terminate ไปให้กลับมามี Instance 2 ตัวตามที่ตั้งค่าไว้ พูดง่าย ๆ คือต่อให้มี EC2 ตัวใดตัวหนึ่งเกิดปัญหา เว็บไซต์ก็ยังสามารถใช้งานต่อได้ครับ
หลังจากนี้ให้รอสักครู่จนกว่าจำนวน Healthy Instance จะกลับมาเป็น 2
ตัว
และเมื่อเรากลับมาดูที่หน้า Instances อีกทีจะพบว่ามี Instance ถูกสร้างขึ้นใหม่จาก Auto Scaling มาแทนที่
พฤติกรรมเช่นนี้คือ Auto Scaling จะคอยตรวจสอบว่า EC2 เป็นไปตามเงื่อนไขที่ตั้งค่าไว้หรือไม่ หากไม่ตรงตามเงื่อนไขก็จะปรับค่าให้ตรงตามเงื่อนไขที่เราตั้งค่าไว้ โดยในกรณีนี้คือการเปิดใช้งาน Instance ให้ครบ 2 ตัว
สรุป
กรณีที่ทำการตั้งค่า Auto Scaling Groups ด้วยตนเองนั้นจะยุ่งยาก อย่างไรก็ตาม การตั้งค่า Auto Scaling Groups โดยใช้ Elastic Beanstalk นั้นง่ายมากๆ และนี่ก็เป็นอีก 1 ข้อดีของการใช้งาน Elastic Beanstalk ครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !
บทความที่เกี่ยวข้อง
- Amazon EC2 Auto Scaling
- ทดลองใช้ Auto Scaling ใน EC2
- Amazon ALB (Application Load Balancer) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
- ทำความรู้จักกับ ALB, NLB, GLB ของ ELB(Elastic Load Balancing) บน AWS ในเบื้องต้น
- AWS Auto Scaling คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
- [Update] ทดลอง Deploy PHP ใน Elastic Beanstalk และเชื่อมต่อกับ RDS
- [Update] ทดลอง Deploy Laravel ใน Elastic Beanstalk และเชื่อมต่อกับ RDS