Search
Duplicate

AWS - health check error

Created time
2023/07/31 15:52
Last edited time
2023/08/02 06:47
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

웹 어플리케이션 배포의 험난한 길

처음 프로젝트를 설계할 때부터 나의 최종 목표는 localhost의 수준에서 벗어나 당당히 웹에 출시하는 것이었다. 그 목표를 실행하기 위해서는 CI/CD 과정이 거의 필수로 느껴졌고, 자연스럽게 대세라는 Github Action과 Auto Scaling과 Load Balancer, 클라우드 워치 등을 한번에 관리할 수 있는 AWS의 Elastic Beanstalk 조합의 CI/CD 파이프라인 구축에 눈길이 갔다.
Github action의 수많은 배포 실패 과정..
그러나, CI/CD는 결코 쉽지 않았고 정말 무수히 많은 에러를 만났다. 웹에 퍼져있는 방대한 자료들은 당연히 내 로컬 환경에 맞지 않았기에 그것들을 적절히 내 환경에 맞게 변형하여 사용해야만 했고 그 과정은 결코 만만치 않았다.

Health Check failed Error 와 Trouble Shooting

지옥의 health check failed error..
그 과정에서 나를 제일 많이 괴롭혔던 것은 바로 health check failed Error였다. 이 놈은 자료를 찾아봐도 그 원인이 각양각색이었으며, Stack Overflow의 뛰어난 선배 개발자 형님들의 도움으로도 좀처럼 해결이 되지 않았다. 그래도 계속 자료를 찾아 삽질한 결과, 결국에는 해결했다. 아래는 내가 시도해봤던 방법들이다.
1.
wait_for_environment_recovery : 시간 늘리기
wait_for_environment_recovery 옵션은 애플리케이션이나 서비스를 배포한 후에 기다리는 시간이다. 현재 프로젝트의 리소스가 CDN을 이용한 리소스를 불러오는 방식이 많기에 해당 리소스를 가져오는데 생각보다 많은 시간이 소요된다. 따라서 , 애플리케이션 환경이 다운되었을 때 자동으로 복구되기를 기다리는 시간을 늘려줌으로써 Time out이 발생하여 502 error가 발생하는 것을 막아 해결하고자 했다. 위의 코드에서는 기존 120초에서 600초로 설정한 모습이다.
그러나, 처음에는 Health: Green으로 해결된 줄 알았으나 곧 이어 다시 Red로 변하면서 결과적으로 해당 방법으로는 문제를 해결하지 못 했다.
2.
ELB의 Target Group의 Health Check 파트의 엔드 포인트를 “/”에서 “healthcheck”로 변경 및 “Success codes” 의 상태코드를 200번대와 300번대를 추가 하기
위 사진과 같이 아마존의 ec2 서비스로 들어가서 로드 밸런싱 파트의 목표 그룹에서 현재 인스턴스의 헬스 체크 부분의 엔드포인트를 “/healthcheck” 바꾸었으며, 내 프로젝트는 리다이렉트하는 부분도 많기에 성공 상태코드도 300번대를 추가로 설정해줬다.
하지만, 안타깝게도 여전히 Github action에서 배포는 실패로 끝났다.. 그렇게 포기하려던 찰나 마지막 방법을 우연히 발견하여 시도하였다.
3.
actuator 디펜던시를 추가하고 헬스 체크 엔드포인트를 “/actuator/health”로 변경하기
implementation 'org.springframework.boot:spring-boot-starter-actuator'
Groovy
복사
위와 같이 build.gradle 에 actuator 디펜던시를 추가해주고 엔드포인트를 “/actuator/health”로 변경하였더니 드디어 배포가 성공적으로 완료되었다.
정말 기나긴 싸움 끝에 드디어 정상적으로 배포가 완료되었다. 아직도 모든 체크 상황이 통과했을 때의 기쁨을 잊을 수가 없다. 혹시 나와 비슷한 에러를 만나신 분들은 부디 위 방법들이 도움되었으면 좋겠다.

참고