[AWS Technical Support Note] Health Check ของ ALB ล้มเหลวและขึ้นข้อความ “Health checks failed with these codes:[XXX]” สาเหตุคืออะไร และมีวิธีแก้อย่างไร

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「ALB のヘルスチェックが “Health checks failed with these codes:[XXX]” で失敗する原因と対処法を教えてください」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.06.29

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

ปัญหาที่เกิดขึ้น

ผมสร้างโครงสร้าง 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

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

เกี่ยวกับ AWS Technical Support Note

นี่เป็นบทความที่จะแนะนำเกี่ยวกับ ทริปต่างๆ ที่เกิดจากการสอบถามปัญหาต่างๆเกี่ยวกับ AWS ในอดีต ที่จะมารวมรวบรวมนำมาเสนอเป็นบทความโดย Technical Support Thailand Team เอง
และยังมีการให้บริการสนับสนุนด้านเทคนิคฟรี โปรดดูรายละเอียดจากลิ้งค์ด้านล่าง