aws ELB 헬스체크 실패 이슈

ssongkim·2021년 11월 8일
2

문제

Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:ap-northeast-2:452444279327:targetgroup/**/**)
진짜 이거 때문에 너무 고생하고 머리카락이 빠지는 듯 하였다.
AWS ECS를 통해 spring docker 컨테이너를 배포하려는데 스프링은 분명 정상적으로 배포 되었음에도 ELB부분에서 헬스체크 FAIL이 일어나 Health statusinitial -> unhealthy -> drained가 되며 서비스가 종료되었다.

해결과정

1. 헬스체크 응답코드 확인

작업 정의를 이용해 서비스를 생성하는 부분이다. 여기서 ALB 연동을 하는 부분에서 상태 확인 경로를 확인할 수 있는데 해당 경로로 보냈을 때 응답해오는 코드를 ELB 타켓 그룹에 그대로 적어주어야 한다.(상태 확인 경로는 타켓 그룹에서 수정 가능하다)
난 헬스체크를 해주는 API를 따로 만들어주지 않아 /로 요청 보낼 시 응답코드로 404가 날라왔다.


EC2 -> 타켓 그룹 -> 해당하는 타켓 그룹의 Advanced health check setting로 이동
포트는 Override로 하고 컨테이너 포트 입력
Success Codes에 위에서 확인한 응답코드 입력(나의 경우엔 404였다.)

2. ECS 서비스 생성 부분에서 헬스체크 유예 기간 확인

이래도 문제가 해결되지 않았다. 분명 컨테이너는 정상 실행 되었는데 자꾸 health check failed가 뜨면서 혼자 스스로 죽어버렸다.
문제는 상태검사유예기간을 충분히 주지 않아 발생한 문제였다.

서비스를 생성하고 ALB를 연동하는 부분에 상태 검사 유예 기간을 설정할 수 있는 란이 있다. 처음에는 30초만 주어도 충분할 줄 알았는데 아니였다. 나의 경우 400초를 주어야했다.

profile
鈍筆勝聰✍️

3개의 댓글

comment-user-thumbnail
2023년 3월 15일

health_check_grace_period_seconds 를 길게 줬더니 healthy 가 뜨네요. 감사합니다!

답글 달기
comment-user-thumbnail
2024년 3월 27일

Success Codes에 위에서 확인한 응답코드 입력(나의 경우엔 404였다.)
이 부분에서 404라는건 어떻게 알게 되셨나요?
저도 같은 에러로 며칠째 고생중입니다ㅠ

1개의 답글