[AWS Technical Support Note] สาเหตุและวิธีแก้ปัญหา healthcheck ของ ALB เกิดความล้มเหลวที่ระบุว่า “Request timed out”

หาก health check ของ ALB เกิดความล้มเหลว ให้ลองดูบล็อกนี้ก่อน

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

สร้าง ALB (Application Load Balancer) แล้ว แต่สถานะ health check ของ target group เป็น unhealthy และในรายละเอียดระบุว่า "Request timed out" ต้องตรวจสอบการตั้งค่าไหนเพื่อแก้ไขปัญหานี้

วิธีแก้ปัญหา

ข้อความข้างต้นหมายถึงคำขอ health check ที่ส่งจาก ALB ไปยัง EC2 เป้าหมายเกิดความล้มเหลวเนื่องจากหมดเวลา (timed out)

ซึ่งมีหลายสาเหตุที่เป็นไปได้ แต่หนึ่งในกรณีที่พบบ่อยที่สุดที่เคยพบคือ การตั้งค่า security group ที่เกี่ยวข้องกับ ALB และ EC2 เป้าหมาย ที่อาจจะยังไม่เหมาะสม
มาลองดูตัวอย่างตามด้านล่างนี้เลย

ก่อนอื่น ให้ตรวจสอบหน้าจอรายละเอียด target group ของ ALB จะพบว่า protocol และ port การเชื่อมต่อไปยัง EC2 เป้าหมายจะถูกตั้งค่าเป็น "HTTP:80"

โดยในกรณีนี้ เพื่อรักษาการเชื่อมต่อระหว่าง ALB และ EC2 เป้าหมาย จะต้องเป็นไปตามเงื่อนไขดังต่อไปนี้

- การตั้งค่า security group ฝั่ง ALB :
ตั้งค่า outbound(ส่งออก)ในการเข้าถึงไปยัง EC2 เป้าหมายด้วย HTTP:80

- การตั้งค่า security group ฝั่ง EC2 :
ตั้งค่า Inbound(ขาเข้า)ในการเข้าถึงจาก ALB ด้วย HTTP:80

ก่อนอื่นมาตรวจสอบ outbound rules ของ security group ทางฝั่ง ALB กันก่อน

ระบุการเชื่อมต่อเป็น HTTP:80 ในทุกปลายทางทั้งหมด (0.0.0.0/0) รวมถึง EC2 ด้วย ซึ่งไม่มีปัญหาอะไร

จากนั้นลองไปดู Inbound rule ของ security group ฝั่ง EC2 กันบ้าง

จะพบว่าไม่ได้ระบุ HTTP:80 ใน rule สำหรับการเข้าถึงโดยระบุให้เข้าถึงได้เฉพาะ SSH:22 จากที่อยู่ IP ที่ระบุเท่านั้น
โดยสาเหตุน่าจะมาจากจุดนี้

ในการระบุการเข้าถึง Inbound rule จาก ALB ให้เพิ่ม rule ต่างๆดังต่อไปนี้

  • rule ที่ระบุ HTTP:80 จาก security group ที่เชื่อมโยงจากฝั่ง ALB

  • rule ที่ระบุ HTTP:80 จากช่วง CIDR ของ subnet ที่เชื่อมโยงกับทั้ง ALB และ ec2 instance

โดยในครั้งนี้จะเพิ่ม rule ที่ระบุการเข้าถึงจาก security group ที่เชื่อมโยงจาก ALB ครับ

หลังจากเพิ่ม rule และรอสักพักสถานะ health check ก็จะเปลี่ยนเป็น healthy แล้ว

ข้อมูลข้างต้นเป็นเพียงตัวอย่างนึงเท่านั้น ซึ่งอาจมีอีกหลายกรณีที่การตั้งค่า security group เป็นสาเหตุที่ทำให้การตั้งค่าเริ่มต้นของ ALB เกิดความติดขัด ดังนั้นควรตรวจสอบจุดนี้ด้วยว่ามีปัญหาหรือไม่

หากแก้ไขตามข้างต้นแล้วสถานะยังคงเป็น unhealthy อยู่ อาจมีปัจจัยอื่น ๆ (อย่างเช่น ปัญหาภายใน EC2)ร่วมด้วย ลองดูบล็อกทางด้านล่างเพิ่มเติมครับ

  1. เคส 403 Amazon Application Load Balancer | DevelopersIO

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

บทความอ้างอิง

บทความต้นฉบับ