การใช้งาน Lightsail load balancer

สร้างเว็บไซต์และแอปพลิเคชันที่มีประสิทธิภาพและพร้อมใช้งานสูงด้วย Lightsail load balancer ในบทความนี้จะมาแนะนำเนื้อหาไปพร้อมกับการใช้งานจริง

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

สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้จะมาแนะนำเกี่ยวกับการใช้งาน Lightsail load balancer

สารบัญ

Lightsail load balancer คืออะไร

สร้างเว็บไซต์และแอปพลิเคชันที่มีประสิทธิภาพและพร้อมใช้งานสูงด้วย Lightsail load balancer

Load balancer ที่ไม่ซับซ้อนของ Lightsail จะกำหนดเส้นทางการรับส่งข้อมูลเว็บผ่าน Instance ของคุณ เพื่อให้เว็บไซต์และแอปพลิเคชันของคุณรองรับรูปแบบต่างๆ ของการรับส่งข้อมูล ได้รับการปกป้องที่ดีขึ้นจากการหยุดทำงาน และมอบประสบการณ์ที่ราบรื่นให้กับผู้เยี่ยมชมของคุณ ทั้งหมดนี้ในราคาที่คาดการณ์ได้ที่ $18 USD ต่อเดือน

ประโยชน์ของ Lightsail load balancer

Scalable (ปรับขนาดได้)

Load balancer ของ Lightsail ปรับขนาดเพื่อรองรับปริมาณการใช้งานเว็บที่ผันแปร คุณยังสามารถเพิ่ม Instance เป้าหมายได้ด้วยตนเองเพื่อป้องกันแอปพลิเคชันแบบ end-to-end จากการพุ่งสูงขึ้นของทราฟฟิกที่คาดไว้

Highly available (พร้อมใช้งานสูง)

สร้างแอปพลิเคชันและเว็บไซต์ที่มีความพร้อมใช้งานสูงโดยปรับใช้ Instance เป้าหมายใน Availability Zone ต่างๆ

Automated health checks (การตรวจสุขภาพอัตโนมัติ)

Load balancer จะตรวจสอบความสมบูรณ์ของ Instance เป้าหมายโดยอัตโนมัติ และกระจายการรับส่งข้อมูลไปยัง Instance เป้าหมายที่สมบูรณ์เท่านั้น

Simple interface (อินเทอร์เฟซที่เรียบง่าย)

Load balancer จะเพิ่มและตรวจสอบ Instance เป้าหมาย และจัดการใบรับรองในที่เดียวด้วยคอนโซล Lightsail หรือ CLI

Secure (ปลอดภัย)

Lightsail จัดการนโยบายความปลอดภัยทั้งหมดในนามของคุณเพื่อให้แน่ใจว่าการเข้าถึงแอปพลิเคชันนั้นปลอดภัยอย่างถูกต้องและปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด

เป้าหมาย

ครั้งนี้จะมาสร้าง DNS Zone, Instance(LAMP 8) 2 ตัว, Lightsail load balancer แล้วเชื่อมต่อเข้าด้วยกัน แล้วเปลี่ยน Hostname และทดสอบใช้งานการกระจายการรับส่งข้อมูลระหว่าง Lightsail load balancer และ Lightsail Instance

ข้อกำหนดเบื้องต้น

การตั้งค่าในบทความนี้ต้องสร้าง Function หลายอย่างใน Service Amazon Route 53 และ Amazon Lightsail โดยมีการตั้งชื่อ Function ต่างๆดังนี้

Service: Amazon Route 53

Function Name
Registered domains cmth-train-ls.link


Service: Amazon Lightsail

Function Name
Instance 1 tinnakorn-lamp
Instance 2 tinnakorn-lamp2
DNS Zone cmth-train-ls.link
Load balancer tinnakorn-lamp-lb
Certificate tinnakorn-lamp-lb-ssl
Hostname (Domain) tinnakorn-lamp-lb.cmth-train-ls.link

สิ่งที่ต้องมี

※เปิดใช้งาน Lightsail Instance แล้ว (Instance 1)

ครั้งนี้จะดำเนินการโดยใช้สภาพแวดล้อม「LAMP (PHP 8)」(สามารถใช้ในสภาพแวดล้อมอื่นๆ ได้ด้วย)

ดูตัวอย่างการเปิดใช้งาน Application ได้ที่ลิงก์ด้านล่างนี้

การซื้อ Domain บน Route 53

ครั้งนี้ผมได้ซื้อ Domain บน Route 53 ที่ชื่อว่า cmth-train-ls.link ล่วงหน้าไว้แล้ว

การจดทะเบียน Domain อาจใช้เวลาถึง 3 วันจึงจะเสร็จสมบูรณ์

ดูตัวอย่างการซื้อ Domain บน Route 53 ตามลิงก์ด้านล่างนี้

การสร้าง DNS Zone

เข้ามาที่ Service Amazon Lightsail แล้วเลือกแท็บ Domains & DNS จะเห็นว่ามี Registered domains ที่ซื้อไว้ล่วงหน้าแสดงอยู่ด้านล่าง ทีนี้ให้คลิกที่ Create DNS zone

เลื่อนลงมาด้านล่างที่หัวข้อ Domain configuration แล้วตั้งค่าดังนี้
» Domain source: ◎ Use a domain that is registered with Amazon Route 53
» Domain: เลือก Domain ที่ซื้อไว้ล่วงหน้า เช่น cmth-train-ls.link
» แล้วคลิก Create DNS zone

เมื่อสร้างเสร็จแล้วจะแสดงหน้าจอแบบนี้

การตั้งค่า Registered domains

กลับไปที่หน้าแรกของ Amazon Lightsail โดยคลิกแท็บ Home ด้านบนซ้าย แล้วเลือกแท็บ Domains & DNS อีกครั้ง แล้วเลื่อนลงมาด้านล่างที่หัวข้อ Registered domains แล้วคลิก Domain ที่ซื้อไว้ล่วงหน้า เช่น cmth-train-ls.link

ให้เลื่อนลงมาด้านล่างสุด แล้วคลิก Edit name servers ในหัวข้อ Name servers

คลิก Use Lightsail name servers แล้วจะมีป๊อปอัพแสดงขึ้นมาถามว่า "Replace name servers?" ให้คลิก Yes, replace

เมื่อแสดง "✅ Using Lightsail name servers" แบบนี้แล้ว ให้คลิก Save ✅ แล้วรอการอัปเดต name servers สักครู่

ถ้า Details แสดง DNS zone แบบนี้ถือว่าการอัปเดต domain name servers ตรงกับ DNS zone name servers แล้ว

กลับมาที่หน้า DNS Zone ที่สร้างไว้เมื่อสักครู่นี้ โดยคลิกแท็บ Home ด้านบนซ้าย แล้วเลือกแท็บ Domains & DNS แล้วคลิก DNS zone ของเราในหัวข้อ DNS zone เช่น cmth-train-ls.link
ก็จะเห็นว่า Domain ของเราแสดงอยู่ในหัวข้อ Domain แบบนี้ ครั้งนี้คือ Domain: cmth-train-ls.link เพียงเท่านี้เราก็สามารถใช้ DNS zone นี้เพื่อจัดการ Domain ของเราได้แล้ว

การสร้าง Lightsail load balancer

เราจะมาสร้าง Lightsail load balancer และตั้งค่า Target instances เพื่อรับส่งข้อมูลระหว่าง Load balancer และ Instance กัน

กลับไปที่หน้า Home แล้วเลือกแท็บ Networking แล้วคลิกปุ่ม Create load balancer

เลือก Load balancer location และป้อนชื่อ Identify your load balancer ที่ต้องการ
การตั้งค่าครั้งนี้คือ location Singapore และชื่อ load balancer tinnakorn-lamp-lb
ส่วนการตั้งค่าอย่างอื่นปล่อยให้เป็น Default ไว้ แล้วคลิก Create instance ที่ด้านล่างสุดของหน้าจอ (Lightsail load balancer มีราคา 18 USD ต่อเดือน ซึ่งไม่มี Free Tier)

เมื่อสร้างเสร็จแล้วจะเข้ามาที่หน้า Load balancer ของเราโดยอัตโนมัติ แล้วให้ตั้งค่า Target instances เพื่อรับส่งข้อมูลระหว่าง Load balancer และ Instance โดยเลือก Instance ที่สร้างเมื่อสักครู่นี้ แล้วคลิก Attach แล้วจะแสดงสถานะ Attaching... ให้รอสักครู่

เมื่อ Attach เสร็จแล้ว สถานะจะแสดงเป็น Health Check: Passed แบบนี้ แล้วคลิก URL ที่ DNS name ด้านบน

แล้วจะแสดงหน้าจอ "Congratulations!" แบบนี้

แล้วลองเพิ่ม /info.php ต่อท้ายลิงก์ ก็จะแสดงหน้าจอ phpinfo แบบนี้

การตั้งค่า DNS Zone

ก่อนหน้านี้เราได้ทำการซื้อ Domain บน Route 53, สร้าง DNS Zone และตั้งค่า Registered domains เรียบร้อยแล้ว ก็จะได้แผนภาพโครงสร้างตามด้านล่างนี้ แต่ยังไม่สามารถใช้งาน Hostname ได้ ดังนั้นต่อไปเราจะมาตั้งค่า DNS Zone โดยการ Add assignment เพื่อให้สามารถใช้ Hostname ที่เราต้องการได้

ไปที่หน้า DNS Zone โดยคลิกแท็บ Home ด้านบนซ้าย แล้วเลือกแท็บ Domains & DNS แล้วคลิก DNS zone ของเราในหัวข้อ DNS zone เช่น cmth-train-ls.link

แล้วเลือกแท็บ Assignments แล้วคลิก + Add assignment ในหัวข้อ Domain assignments

แล้วตั้งค่า Assignments ตาม domain name ของเราดังนี้
» Select a domain name: ป้อนตามต้องการ ครั้งนี้คือ tinnakorn-lamp-lb.cmth-train-ls.link
» Select a resource: เลือก Load balancer ที่สร้างไว้ก่อนหน้านี้ ครั้งนี้คือ tinnakorn-lamp-lb
» แล้วคลิก Assign ✅

เมื่อ Assign เสร็จแล้วจะแสดง Record name แบบนี้
ครั้งนี้คือ tinnakorn-lamp-lb.cmth-train-ls.link (Record name นี้ต่อไปจะเรียกว่า Hostname)

การตั้งค่า SSL Certificate บน Load balancer

กลับมาที่หน้าจอ Lightsail load balancer ของเรา แล้วเลือกแท็บ Custom domains (การตั้งค่าครั้งแรกจะแสดงหน้าจอแบบนี้) แล้วคลิก I understand, continue

แล้วคลิก + Create certificate ในหัวข้อ Attached certificates

เมื่อมีป๊อปอัพ Create certificate แสดงขึ้นมา ให้ป้อน Certificate name ที่ต้องการ
ครั้งนี้คือ tinnakorn-lamp-lb-ssl แล้วคลิก Continue

แล้วระบุ domains or subdomains ให้เหมือนกับตอน Assignment (สามารถระบุได้ถึง 10 domains or subdomains)
ครั้งนี้คือ tinnakorn-lamp-lb.cmth-train-ls.link แล้วคลิก Create certificate

คลิก Continue

แล้วรอ Pending certificates (1) สักครู่ ซึ่งจะแสดง Status: Attempting to validate your certificate… ใน Certificate ของเราแบบนี้ (หลังจากผ่านไปสัก 1-2 นาทีแล้วถ้ายังแสดงหน้าจอแบบเดิมอยู่ แนะนำให้ Reload หน้าเว็บไซต์)

แล้วคลิก Attach

เมื่อเสร็จแล้วจะแสดง Domain ใน Custom domains และ Status: ✅ Valid, in use อยู่ใน Certificate ของเราแบบนี้

การทดสอบ Hostname

ตรวจสอบว่าเราสามารถเชื่อมต่อ Hostname จากเว็บเบราว์เซอร์ได้หรือไม่ โดยเปิด URL ตามที่ระบุใน domains or subdomains บนเว็บเบราว์เซอร์ที่เราใช้งานตามนี้

https://[subdomain].[DNS zone]

ถ้าแสดงหน้าจอแบบนี้ถือว่าเราสามารถเข้าถึง Hostname สำเร็จ

การ Attach Instance ใน Lightsail load balancer

จนถึงตอนนี้เราสามารถใช้งานฟังก์ชัน Lightsail load balancer ได้แล้ว แต่สำหรับฟังก์ชันนี้ไม่เหมาะที่จะใช้กับ Instance เพียงแค่ตัวเดียว เพราะฟังก์ชันนี้เป็นการทำงานแบบกระจายการรับส่งข้อมูลที่เหมาะสำหรับการใช้งานกับ Instances ตั้งแต่ 2 ตัวขึ้นไป ดังนั้นผมจะสร้าง "Instance 2" ขึ้นมา โดยการสร้างครั้งนี้จะสร้างใน Availability Zone(AZ) ที่แตกต่างจาก "Instance 1" เช่นในตัวอย่างนี้คือ "Instance 1" จะสร้างอยู่ใน「AZ(Zone A)」และ "Instance 2" จะสร้างอยู่ใน「AZ(Zone B)」เป็นต้น ! เอาล่ะ ไปสร้าง Instance 2 กันเลย

การสร้าง Instance 2

กลับมาที่หน้า Home แล้วดูที่แท็บ Instances จะเห็นว่า "Instance 1" ในตัวอย่างนี้สร้างในรีเจี้ยน Singapore ใน Zone A
ส่วน "Instance 2" เราจะสร้างในรีเจี้ยน Singapore ใน Zone B ทีนี้ให้คลิก Create instance

แล้วเลือก Instance location ให้ตรงกับ "Instance 1" และเลือก Availability Zone ที่ต่างจาก "Instance 1"
ดังนั้นครั้งนี้จะเลือก Singapore และ Zone B

การเลือก platform และ blueprint ในหัวข้อ Instance image ครั้งนี้จะเหมือนกับ "Instance 1"

การเลือก Instance plan ครั้งนี้ก็จะเหมือนกับ "Instance 1" แต่จะตั้งชื่อ Instance ใหม่เป็น tinnakorn-lamp2
เมื่อตั้งค่าเสร็จแล้วให้คลิก Create instance ที่ด้านล่างสุดของหน้าจอ

เมื่อสร้างเสร็จแล้ว จะเห็นว่า "Instance 2(tinnakorn-lamp2)" สร้างในรีเจี้ยน Singapore, Zone B และ "Instance 1(tinnakorn-lamp)" สร้างในรีเจี้ยน Singapore, Zone A

การแสดงหน้าจอ phpinfo ของ Instance 2

ต่อไปเราต้องสร้างไฟล์ info.php ใน Server "Instance 2" ให้เหมือนกับ "Instance 1" เพื่อที่จะใช้ในการทดสอบการใช้งาน Lightsail load balancer โดยขั้นตอนก็จะเหมือนกับที่เราสร้างไฟล์ใน Server "Instance 1" เลย

หากต้องการย้อนกลับไปดูวิธีการให้คลิกที่ลิงก์หัวข้อ การแสดงหน้าจอ phpinfo ได้เลย (หากคลิกแล้วไม่ไปยังหัวข้อดังกล่าวให้คลิกที่หัวข้อตามลิงก์จากเมนูด้านซ้าย)

เมื่อเราสร้างไฟล์ info.php ใน Server "Instance 2" เสร็จแล้ว ก็ให้ทดสอบการแสดงหน้าจอ phpinfo ของ "Instance 2" โดยเปิดด้วย URL ตามด้านล่างนี้

http://[Public IP]/info.php

ในตัวอย่างนี้ได้แสดงหน้าจอ phpinfo ทั้ง 2 Instance เพื่อให้เห็นว่า Instance เหล่านี้แสดงข้อมูลที่เหมือนกันแล้ว
สำหรับ Linux ip นี้จะเป็น Private IP ของแต่ละ Instance ซึ่งเราจะใช้ Linux ip นี้เป็นจุดสังเกตในการทดสอบการใช้งาน Lightsail load balancer โดยเปรียบเทียบการกระจายการรับส่งข้อมูลระหว่าง "Instance 2" และ "Instance 1" โดยใช้ Hostname ในภายหลัง

เมื่อเราเตรียม Instance เสร็จแล้วทีนี้ก็พร้อมที่จะทำการ Attach Instance ในขั้นตอนถัดไปแล้ว

การ Attach Instance

ต่อไปเราจะทำการ Attach "Instance 2" ใน Lightsail load balancer ที่ทำการ Attach "Instance 1" ก่อนหน้านี้

กลับไปที่หน้า Home แล้วเลือกแท็บ Networking แล้วคลิกเข้าไปที่ Load balancer ของเรา

แล้วคลิก Attach another ในแท็บ Target instances

เลือก Instance 2(tinnakorn-lamp2) ของเรา แล้วคลิก Attach แล้วรอ Attaching... สักครู่

เมื่อเสร็จแล้วจะแสดงหน้าจอแบบนี้

การทดสอบ Hostname สำหรับการใช้ Load balancer

สำหรับการแสดงหน้าจอ phpinfo ใน Instance 2 เมื่อสักครู่นี้ Linux ip ของทั้ง 2 Instance คือ
・"Instance 2": Linux ip-172-26-26-253
・"Instance 1": Linux ip-172-26-10-106
ทีนี้หลังจากเรา Attach "Instance 2" เสร็จแล้วจะมาทดสอบการใช้ Load balancer โดยใช้ Hostname กัน

เปิดลิงก์ตามด้านล่างนี้

https://[subdomain].[DNS zone]/info.php

ในตัวอย่างนี้ตัว Load balancer ได้กระจายการรับส่งข้อมูลโดย random เข้ามาที่ "Instance 2": Linux ip-172-26-26-253

แล้วเมื่อคลิก Reload ก็จะเห็นว่า Load balancer ได้กระจายการรับส่งข้อมูลโดยแบ่งการเชื่อมต่อเข้ามาที่ "Instance 1": Linux ip-172-26-10-106
ในกรณีนี้ตัว Load balancer จะแบ่งการเชื่อมต่อโดยสลับไปแต่ละ Instance ทุกครั้งที่เราทำการ Reload

การตั้งค่า Session persistence

เข้ามาที่หน้าจอ Load balancer ของเรา เลื่อนลงมาด้านล่างสุดที่หัวข้อ Session persistence ในแท็บ Target instances
แล้วเปิดใช้งาน Session persistence ที่ Session persistence is inactive โดยเลื่อนปุ่มไปด้านขวาให้เป็นเครื่องหมาย ✅ แล้วจะแสดงเป็น Session persistence is active แบบนี้

ทดสอบการใช้งาน Load balancer สำหรับ Session persistence

หลังจากตั้งค่า Session persistence เสร็จแล้วจะมาทดสอบการใช้งาน Load balancer อีกครั้ง

กลับไปที่หน้า phpinfo ซึ่งในตัวอย่างตอนนี้การเชื่อมต่อจะยังคงอยู่ที่ "Instance 1": Linux ip-172-26-10-106
ให้คลิก Reload จะเห็นว่าการเชื่อมต่ออยู่ที่เดิมโดยไม่มีการแบ่งการเชื่อมต่อไปยัง Instance อื่น

ต่อไปเปิด URL เดียวกันในเบราว์เซอร์อื่น โดยครั้งนี้จะใช้ Edge
จะเห็นว่า Load balancer ได้กระจายการรับส่งข้อมูลโดยแบ่งการเชื่อมต่อเข้ามาที่ "Instance 2": Linux ip-172-26-26-253
แล้วคลิก Reload จะเห็นว่าการเชื่อมต่ออยู่ที่เดิมโดยไม่มีการแบ่งการเชื่อมต่อไปยัง Instance อื่น

ทีนี้ลองคลิก Reload ดูทั้ง 2 เบราว์เซอร์ ก็จะเห็นว่า Load balancer ล็อกการเชื่อมต่อไว้ให้คงอยู่ในแต่ละเบราว์เซอร์โดยไม่สลับไปยัง Instance อื่น
แต่ถ้าเรานำ URL นี้ไปเปิดในเบราว์เซอร์อื่นอีก Load balancer ก็จะทำหน้ากระจายการรับส่งข้อมูลโดยแบ่งการเชื่อมต่อไปยัง Instance ที่เหมาะสม

สรุป

Lightsail load balancer จะกระจายปริมาณการใช้งานเว็บที่เข้ามาระหว่าง Lightsail Instances หลายตัวใน Availability Zone หลายแห่ง ซึ่งเราสามารถเพิ่มและลบ Instances จาก Lightsail load balancer ได้ตามความต้องการโดยไม่รบกวนโฟลว์คำขอโดยรวมที่ส่งไปยังแอปพลิเคชันของเรา

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

Link อ้างอิง