Amazon ALB (Application Load Balancer) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門ブログリレー2022 Amazon Application Load Balancer編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความที่เกี่ยวข้อง" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.06.09

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

สวัสดีครับ! ฝ่าย Consulting ของ Classmethod คิมแจอุค ครับ!

รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว

เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ

งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "Amazon Application Load Balancer" ครับ

Load Balancing คือ?

Elastic Load Balancing (ELB) จะกระจายการรับส่งข้อมูลแอปพลิเคชันที่เข้ามาโดยอัตโนมัติในหลายเป้าหมายและอุปกรณ์เสมือนใน Availability Zone (AZ) หนึ่งแห่งขึ้นไป

หรือจะเรียกง่ายๆว่าตัวที่แบ่งการเชื่อมต่อไปยังเซิร์ฟเวอร์หลายๆตัว นั่นเรียกว่า Load Balancing ครับ
คงจะมีคนสงสัยแล้วใช่ไหมครับว่า "แล้ว Load Balancer เรียกว่าอะไรล่ะ"
Load Balancer คือ Service ที่ให้บริการเทคโนโลยี Load Balancing ครับ
AWS มีการให้บริการ Load Balancer อยู่ 3 แบบครับ ได้แก่

  • Application Load Balancer
  • Network Load Balancer
  • Gateway Load Balancer

OSI 7 Layers

Load Balancer แต่ละตัวแตกต่างกันตรงที่มันทำงานบน Layers ของ OSI 7 Layers ที่แตกต่างกันครับ

Application Load Balancerจะใช้ "Layer7" ที่เป็น Application Layer ในการกระจายการรับส่งข้อมูลแอปพลิเคชันที่ URL หรือ http-header ครับ
หรือก็คือ จะทำแบ่งการเชื่อมต่อตามURL หรือ แบ่งตามค่าCookie ของ http-header ตามคำขอของ Client แล้วส่งไปที่เซิร์ฟเวอร์ครับ

ในกรณีของ "Layer7" Load Balancer ยังสามารถตรวจสอบและป้องกันไวรัสประเภทที่มีรูปแบบที่ตายตัว เป็นเหมือนกับ DoS/DDoS ที่ Filering Traffic ที่ผิดปกติได้ด้วยครับ

การทำงานของ Application Load Balancer

  1. CLient จะส่ง Request ไปที่ Application
  2. Load Balancer Listener จะรับ Request ที่ตรงกันจาก Protocols and ports ที่ตั้งค่าไว้
  3. Receive listener จะตรวจสอบ Request ที่ได้รับตามกฎที่ตั้ง หากตรงตามที่ตั้งค่าจะ Routing Target Group ที่เหมาะสมไปที่ Request และสามารถใช้ HTTPS listener เพื่อ offload งาน TLS encryption และ decryption ที่ Load Balancer ได้
  4. Target Group ที่ทำงานปกติ จำนวน 1 หรือมากกว่าจะรับ traffic ของ Load Balancing Algorithm กับ Listener ที่ตามกฎ Routing

Private Subnet?Public Subnet?

ตอนแรกที่สร้าง Application Load Balancer เรามักจะกังวลว่าจะเลือก Private Subnet หรือ Public Subnet ดี

ตอนสร้าง Application Load Balancer ตรง "Scheme" จะมีให้เลือกระหว่าง "Internet-facing" กับ "Internal" ในตรงนี้ถ้าเราเลือก Public Subnet หรือ Private Subnet ตัวเลือกของ "Scheme" ก็จะเปลี่ยนได้ด้วยครับ

"Internet-facing" คือการ Routing ที่ Target ด้วย Request ผ่านทางอินเตอร์เน็ต จาก Client
"Internal" คือการใช้ Private IP Address Routing Request ที่ Target


พอเราสร้าง Load Balancer เสร็จ Subnet ที่เราเลือกจะถูกสร้าง Load Balancer Node
ถ้าจำเป็นต้องใช้อินเตอร์เน็ตเชื่อมต่อ Web Server แล้วเราเลือก Private Subnet ละก็ Load Balancer Node จะถูกสร้างที่ Private Subnet
ทำให้เกิดอาการไม่สามารถเชื่อมต่อ Web Server จากภายนอกไม่ได้ ฉนั้น เราจำเป็นต้องเลือก Subnet ตามสถานการณ์ของตนเอง

Subnet สามารถเลือกได้ที่ "Network mapping"

ถ้าเราเลือก "Scheme" ที่ "Internet-facing" จำเป็นต้องเลือก Public Subnet ถ้าเราเลือก Private Subnet จะมีข้อความแจ้งเตือนแบบนี้ขึ้นมา ในทางกลับกันถ้าเราเลือก "Internal" ก็มีข้อความแจ้งเตือนขึ้นมาเหมือนกัน

  • Internet-facing: Public Subnet
  • Internal: Private Subnet

Network mapping?

เปิดใช้งาน Availability zone 2 ที่ขึ้นไป จะช่วยเพิ่มความทนทานต่อความผิดพลาดของ Application

เลือก 1 subnet ในแต่ละโซน ถ้าเปิดการใช้งาน Dualstack สำหรับ Load Balancer ให้เลือก Subnet ที่เชื่อมกับ ฺBlock IPv6 CIDR
แล้วเลือกต่อไปนี้

  1. Subnet อย่างน้อย 2 Availability zone
  2. Subnet ใน 1 Local Zones ขึ้นไป
  3. 1 Outpost Subnet

Security Group


Load Balancer เองก็สามารถตั้งค่า Security Group ได้ ในส่วน Application Load Balancer สามารถตั้งค่า HTTP หรือ HTTPS ได้

สำหรับ Security Group ให้เลือก inbound rules เป็น HTTP แล้วเลือก Source เป็น Anywhere ตามรูปด้านบน

แล้วเพิ่ม Security Group ของ Application Load Balancer ใส่ใน inbound rules ของ EC2 Security Group ที่สร้างขึ้นครับ

HTTPS ก็สามารถทำได้เหมือนกันครับ แต่ว่าถ้าใช้ HTTPS จำเป็นต้องมี SSL certificate ครับ

ตรง Listener ถ้าเราเลือก HTTPS ตรงข้างล่างจะมี "Secure listener settings" ปรากฎขึ้นมา
ตรงนี้สามารถเลือก SSL certificate ได้ครับ

วิธีลงทะเบียน SSL โดยใช้ ACM สามารถดูได้ที่บทความด้านล่างนี้ครับ


ถ้าไม่ผ่าน Application Load Balancer จะไม่สามารถทำให้ EC2 เชื่อมต่อ HTTP HTTPS โดยตรงได้

Target Groups

ใช้สำหรับ Routing Request จำนวนตั้งแต่ 1 ขึ้นไปที่ถูกบันทึกในแต่ละ Target Group

ตอนที่สร้าง Rule ของ Listener แต่ละตัว เราจะต้องเลือก Target Group ถ้าตรงกับ Rule ที่เราสร้างขึ้น Traffic จะถูกส่งไป Target Group ที่กำหนด
เราสามารถสร้าง Target Group เป็นอีกตัว ตาม Request ชนิดต่างๆได้ ยกตัวอย่างเช่น สร้าง Target Group สำหรับ Request ทั่วไป 1 ตัว และสร้าง Target Group สำหรับ Request ที่จะส่งไป Micro Service ของ Application เป็นอีกตัวนึง

การตั้งค่า Health checks ของ Load Balancer จะขึ้นอยู่กับ Target Group แต่ละตัว
แต่ละ Target Group จะใช้การตั้งค่า Default ของ Health checks
โดย Default ของ Health check จะถูกตั้งค่าอยู่ที่ Path index.html ครับ

ปัญหา health checks failed


ถ้าที่ EC2 ไม่มี Apache Installed อยู่ บางทีจะมี error "health checks failed" ออกมา เราจึงควรตรวจสอบว่า EC2 มี Apache Installed อยู่ไหม

และยังมีเคสที่ Installed Apache อยู่แท้ๆ แต่มี error "Health checks failed with these codes: [403]" ออกมาอยู่
error นี้ หมายความว่า ที่ Paths ใน Target Group ที่เราใช้อยู่ ไม่มีไฟล์ index.html ครับ

cp /usr/share/httpd/noindex/index.html /var/www/html/index.html

นี่เป็นคำสั่งเอา index.html ไปใส่ที่ Paths /var/www/html

พอเราเข้าไปดูที่ Target Gruops อีกทีจะเห็นว่าเปลี่ยนเป็น "healthy" แล้ว

ท้ายสุด

เป็นยังไงกันบ้างครับ สำหรับเนื้อหา AWS ปี 2022 ฉบับเบื้องต้น ตอน Amazon Application Load Balancer ก็มีเพียงแค่นี้ครับ เป็นยังไงกันบ้างครับ ท่านผู้อ่านรู้จักเกี่ยวกับ ALB มากขึ้นรึยังครับ ถ้าอยากรู้เกี่ยวกับ ALB เพิ่มเติม   ใน Blog ของ dev.classmethod ก็ยังมีบทความที่เกี่ยวกับ Load Balancer ให้อ่านอีกครับ
โดยสามารถดูได้ที่ "บทความที่เกี่ยวข้อง" ด้านล่างได้เลยครับ

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

AWS再入門ブログリレー2022 Amazon Application Load Balancer編(บทความต้นฉบับ)
Amazon ALB (Application Load Balancer) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
ทำความรู้จักกับ ALB, NLB, GLB ของ ELB(Elastic Load Balancing) ในเบื้องต้น
ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ