[AWS Technical Support Note] สาเหตุที่ Health check ของ ALB แสดงข้อความ “Health checks failed with these codes:[XXX] และ วิธีจัดการ
ปัญหาที่เกิดขึ้น
มีสร้าง ALB (Application Load Balancer) ไว้แล้วแต่สถานะ Health check ของ target group ขึ้นว่า unhealthy
ในรายละเอียดระบุว่า "Health checks failed with these codes:[XXX]" ต้องตั้งค่าอะไรเพื่อให้แก้ไขปัญหานี้
วิธีแก้ปัญหา
ข้อความข้างต้นจะเกี่ยวกับ HTTP status code ที่แสดงในส่วน [XXX] ถูกตอบกลับจากฝั่ง EC2 เป้าหมาย เพื่อตอบสนองต่อคำขอของ Health check ที่ส่งจาก ALB ไปยัง EC2 เป้าหมาย
โดย ALB Health check จะมีกำหนด "success code" ไว้ หาก status code มีความแตกต่างกัน จะถูกตีกลับจากฝั่ง EC2 อย่างต่อเนื่อง ทำให้ Health check เกิดความล้มเหลว ในการแก้ปัญหานี้ต้องตรวจสอบการตั้งค่าภายใน EC2 เพื่อให้ตอบกลับ "success code" ที่ระบุไว้กลับมา
ตามตัวอย่างแสดงด้านล่าง
สามารถตรวจสอบการตั้งค่าปัจจุบันได้บนหน้าจอรายละเอียดของ Health check
จากการตั้งค่าทางด้านบน "Health check จะสำเร็จได้ก็ต่อเมื่อมีการเข้าถึง patch "/" (documemt root) บน EC2 ด้วย HTTP แล้วต้องตอบกลับเป็น status code 200 เสมอ " ซึ่งหากไม่ตรงตามเงื่อนไขนี้จะเกิดข้อผิดพลาดใน Health check ขึ้น
ให้เราตรวจสอบการตั้งค่าภายในของ EC2 เป้าหมาย และแก้ไขสาเหตุของ status code [XXX] ที่แสดงในข้อความแสดงข้อผิดพลาดเพื่อให้ตอบกลับเป็น 200
(สำหรับ status code ทั่วไปของ HTTP และความหมาย สามารถดูรายละเอียดเพิ่มเติมได้ที่ "HTTP response status codes" ในเอกสารอ้างอิง)
ตัวอย่างบางส่วน:
- ในกรณีของ "404"
หมายถึง ไม่มีหน้าเว็บตอบกลับสำหรับเส้นทางที่ระบุของ Health check ตัวอย่างเช่น หาก path ของ Health check คือ "/" ให้ตรวจสอบว่ามีหน้าเว็บ เช่น index.html อยู่ใน documemt root ภายใน EC2 instance หรือไม่
- ในกรณีของ "403"
หมายถึง ไม่สามารถเข้าถึง path ของ Health check ที่ระบุได้เนื่องจากปัญหาด้านสิทธิ์ หากมีการตั้งค่าจำกัดการเข้าถึงหน้าเว็บภายใน EC2 ให้ลองตั้งค่า static page เฉพาะ (เช่น healthcheck.html) สำหรับ Health check ที่ไม่อยู่ภายใต้ข้อจำกัด และเปลี่ยน path ของ Health check ไปยังหน้านั้นๆ
- ในกรณีของ "301" และ "302"
หมายถึง มีการกำหนดค่า redirect ใน path ของ Health check ที่ระบุไว้ วิธีแก้คือให้เราตั้งค่า static page ใน path ของ Health check ที่ตอบกลับ status code เป็น 200 เสมอแทน
※ เราสามารถเปลี่ยนแปลง success code ของ Health check ได้ ตัวอย่างเช่น เราสามารถตั้งค่าการตอบกลับ 301 หรือ 302
เป็น Health check success ได้ โดยการระบุกลุ่ม 300 ที่เป็นการ redirect ไว้ในขอบเขตของ success code
แต่ทว่า ในกรณีดังกล่าว หากหน้าเว็บที่ redirect เกิดปัญหาแต่ Health check ยังแสดงเป็น success
อาจทำให้เข้าใจเกิดสถานการณ์ผิดเพี้ยนไป โดยพื้นฐานแนะนำให้ใช้ success code เป็น 200 ดีกว่า
หากคุณแก้ปัญหาข้างต้นให้ status code ตอบกลับมาเป็น 200 จาก EC2 Health check ของ ALB ก็จะขึ้นสถานะเป็น healthy ครับ
บทความอ้างอิง
- Health checks for your target groups - Elastic Load Balancing (English)
- HTTP response status codes - HTTP | MDN (English)
- Amazon ALB (Application Load Balancer) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS | DevelopersIO
- ทำความรู้จักกับ ALB, NLB, GLB ของ ELB(Elastic Load Balancing) บน AWS ในเบื้องต้น | Developers