Ecs 헬스체크에 관하여
헬스체크 문제인 것 같아서 태스크 정의를 수정했는데도 안되길래 보았더니 ALB의 타겟 그룹에도 헬스 체크가 있어서 정리해보았습니다.
두 가지 헬스체크가 존재하는 이유
ECS에서는 두 가지 헬스체크가 각각 다른 역할을 수행합니다.
Task Definition 헬스체크는 ECS가 컨테이너의 생존 여부를 확인하기 위해 사용합니다. 127.0.0.1에서 헬스체크 엔드포인트를 호출하여 컨테이너가 정상적으로 동작하는지 확인하고, 실패하면 ECS가 자동으로 태스크를 재시작합니다.
Target Group 헬스체크는 ALB가 트래픽 라우팅을 결정하기 위해 사용합니다. ALB의 IP에서 지정된 경로를 호출하여 이 컨테이너가 실제로 사용자 요청을 받을 준비가 되었는지 확인합니다. 실패하면 ALB는 해당 타겟으로 트래픽을 보내지 않고 502 에러를 반환합니다.
배포 시 Target Group 헬스체크의 중요성
ECS의 Rolling Update 방식에서는 새 태스크를 시작하고, 이를 대상 그룹에 등록한 후 ALB가 헬스체크를 실행합니다. 이때 헬스체크가 성공하면 트래픽이 새 태스크로 전환되고 기존 태스크가 종료되어 배포가 완료됩니다. 하지만 헬스체크가 실패하면 ECS는 “새 버전에 문제가 있다”고 판단하여 새 태스크를 제거하고 기존 태스크를 유지합니다. 이것이 바로 자동 롤백입니다.
이런 동작 방식 때문에 Target Group 헬스체크가 실패하면 새 버전으로 배포되지 않고 기존 계정으로 돌아갑니다. 이는 ECS의 안전장치로, 문제가 있는 버전이 배포되어 서비스가 중단되는 것을 방지하는 겁니다.
두 헬스체크 모두 필요한가?
결론은 Yes 입니다. Task Definition 헬스체크는 컨테이너가 죽었을 때 자동으로 재시작해주는 역할을 하고, Target Group 헬스체크는 배포의 성공/실패를 결정하고 사용자 트래픽을 안전하게 라우팅하는 역할을 합니다.
만약 Task 헬스체크만 있다면 ALB가 트래픽을 어디로 보내야 할지 판단할 수 없고, Target Group 헬스체크만 있다면 컨테이너가 죽어도 자동으로 복구되지 않습니다. 두 헬스체크는 서로 다른 목적을 갖고, 상호보완적으로 작동합니다. 따라서 둘 다 동일한 API 경로로 설정하는 것이 좋습니다.