การใช้งาน Lightsail load balancer
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำเกี่ยวกับการใช้งาน Lightsail load balancer
สารบัญ
- Lightsail load balancer คืออะไร
- เป้าหมาย
- ข้อกำหนดเบื้องต้น
- สิ่งที่ต้องมี
- การซื้อ Domain บน Route 53
- การสร้าง DNS Zone
- การตั้งค่า Registered domains
- การสร้าง Lightsail load balancer
- การตั้งค่า DNS Zone
- การตั้งค่า SSL Certificate บน Load balancer
- การทดสอบ Hostname
- การ Attach Instance ใน 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
แล้วรอ Pending certificates (1) สักครู่ ซึ่งจะแสดง Status: Attempting to validate your certificate…
ใน Certificate ของเราแบบนี้ (หลังจากผ่านไปสัก 1-2 นาทีแล้วถ้ายังแสดงหน้าจอแบบเดิมอยู่ แนะนำให้ Reload หน้าเว็บไซต์)
เมื่อเสร็จแล้วจะแสดง 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) ครับ !