[AWS Technical Support Note] Health Check ของ ALB ล้มเหลวและขึ้นข้อความ “Health checks failed with these codes:[XXX]” สาเหตุคืออะไร และมีวิธีแก้อย่างไร
ปัญหาที่เกิดขึ้น
ผมสร้างโครงสร้าง ALB(Application Load Balancer)แต่ว่าเมื่อลองใช้งาน ในส่วนฟังก์ชัน Target Group ตรง Health Status ขึ้นว่า unhealthy และในส่วน Detail เขียนไว้ว่า "Health checks failed with these codes: [403]" ในการจัดการปัญหานี้ มีวิธีแก้อย่างไรต้องไปตั้งค่าที่ไหนครับ
คำตอบคือ
ตามข้อความด้านบน ALB จะส่ง Health Check ไปที่ Target Group ของ EC2 แล้ว EC2 ก็จะส่ง [XXX]
กลับมาให้เราเห็น ซึ่งส่วนนี้คือ HTTP Status code ครับ
Health Check ของ ALB จะถูกตั้งค่า "Success Codes" ถ้า EC2 ส่ง Status code ที่แตกต่างกลับมาก็จะ ขึ้นล้มเหลวในการเชื่อมต่อตามที่เห็นในภาพด้านบนครับ
วิธีเก้ไขปัญหาก็คือ เราต้องไปตั้งค่าให้ EC2 ส่ง "Success Codes" กลับมาครับ
ยกตัวอย่างเช่นภาพด้านล่างครับ
การตั้งค่าปัจจุบัน เราสามารถดูได้ที่หน้า Health Check (ใน Target Group) ครับ
จากการตั้งค่าด้านบนมีความหมายว่า "การที่จะทำให้ Health Check สำเร็จ จำเป็นต้องใช้ HTTP เข้าไปเชื่อมต่อ Root "/" ใน EC2(Root Document) แล้วให้ตอบกลับเป็น Status code มาว่า 200" ถ้าไม่ตรงเงื่อนไขนี้ก็จะ ขึ้น health check error ครับ
ยกตัวอย่างโค้ดที่เห็นบ่อยด้านล่างนี้:
- [404]:
ไม่มีหน้าเว็บเพจที่เลือกสำหรับสถานที่ Health Check ที่เลือกยกตัวอย่างเช่น Health Check path อยู่ที่ "/" ให้เราไปสำรวจว่ามีหน้าเว็บเพจต่างๆเช่น index.html อยู่ใน Document Root ข้างใน EC2 Instance หรือเปล่า -
[403]:
Health Check ที่เลือกไม่มีอำนาจในการเข้าไปหน้าเว็บเพจที่ตั้งให้ไป Check เราแนะนำให้คุณเลือกหน้าเพจที่เป็น Static page และไม่จำเป็นต้องมีอำนาจพิเศษก็เข้าไป Health Check ได้ (สำหรับ 403 เรามีบทความภาษาไทยที่เขียนไว้แล้ว เข้าไปดูได้ที่ เคส 403 Amazon Application Load Balancer | DevelopersIO) -
[301] หรือ [302]:
หน้าเว็บเพจที่เลือกสำหรับสถานที่ Health Check ที่เลือกเป็น redirect เราแนะนำให้คุณเลือกหน้าเพจที่เป็น Static page และไม่จำเป็นต้องมีอำนาจพิเศษก็เข้าไป Health Check ได้
*เราสามารถตั้งค่า "โค้ดที่ทำสำเร็จ" ให้ redirect ได้ เราสามารถเลือก "Success Codes" เพิ่มเป็น 300 ได้ แค่นี้ 301, 302 Health Check ก็จะขึ้นว่าสำเร็จแล้ว
แต่ทว่า หากหน้าเว็บที่ redirect ส่งไปเกิดปัญหาขึ้น ก็จะยัง Health Check ผ่านอยู่ดี ทำให้เข้าใจได้ยาก เราจึงแนะนำให้คุณเลือก "Success Codes" เป็น 200
ถ้าทำตามด้านบนนี้ให้ EC2 ส่ง Status code กลับมาเป็น 200 ใน Health Check ของ ALB จะขึ้น healthy แน่นอน
ถ้าข้อมูลนี้เป็นประโยชน์กับคุณผมก็ดีใจครับ
(HTTP status codes อื่นๆนอกจากนี้ดูได้จากลิ้งค์ด้านล่างเลยครับ)
บทความต้นฉบับ
ALB のヘルスチェックが “Health checks failed with these codes:[XXX]” で失敗する原因と対処法を教えてください | DevelopersIO
บทความที่เกี่ยวข้อง
- Amazon ALB (Application Load Balancer) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022 | DevelopersIO
- ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ | DevelopersIO
- ทำความรู้จักกับ ALB, NLB, GLB ของ ELB(Elastic Load Balancing) ในเบื้องต้น | DevelopersIO
เกี่ยวกับ AWS Technical Support Note
นี่เป็นบทความที่จะแนะนำเกี่ยวกับ ทริปต่างๆ ที่เกิดจากการสอบถามปัญหาต่างๆเกี่ยวกับ AWS ในอดีต ที่จะมารวมรวบรวมนำมาเสนอเป็นบทความโดย Technical Support Thailand Team เอง
และยังมีการให้บริการสนับสนุนด้านเทคนิคฟรี โปรดดูรายละเอียดจากลิ้งค์ด้านล่าง