23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
현재 팀에서 관리하고 있는 서버는 AWS ECS 위 Fargate Container 로 서비스하고 있습니다.
코드 수정사항이 형상관리협업도구(Github)에 반영되면 CI/CD를 통해 ECR에 새로운 도커 이미지가 배포되고 해당 이미지를 바라보도록 ECS Service Update 가 진행됩니다.
최근 신규 수정사항을 배포 후 난감한 상황을 겪었는데요.
작업 진행 후 배포시에 개발환경에서 배포에 실패해서 신규로 뜨는 서버들은 자동으로 Draining 이 되었고, 반면에 스테이징, 운영 환경은 정상적으로 배포되었습니다.
코드도 동일하고, 설치되는 의존성 패키지 버전도 모두 체크해보았으나 동일했습니다.
심지어는 마지막으로 정상 배포했던 코드로 롤백해서 신규배포해보았는데, 이것도 실패하였습니다 ㅠ.ㅠ
도저히 원인을 못찾겠어서 머리를 싸매고 원인을 못찾은채 퇴근했고 다음날 아침에 원인을 찾을 수 있었는데요.
당연히 서버가 제대로 안돌았겠거니해서 안보고 있었는데, 혹시나해서 배포실패한 태스크들의 로그를 확인해봤을때, 정상적으로 서버가 동작한 로그를 확인할 수 있었습니다.
서버가 제대로 실행이 되었는데 배포가 실패한 원인은 Health check 실패뿐이었습니다.
앞단 각 서비스 별 개별적으로 위치한 NLB 타겟 그룹의 Healthcheck 셋팅중 지정한것은 프로토콜(TCP) 뿐이었고 나머지는 모두 디폴트 세팅으로 사용하고 있었습니다.
저희는 IaaC(Infrastructure-as-a-Code)도구인 Pulumi 로 인프라를 관리하고 있는데요. Pulumi component 의 target group health check argument를 확인해보면
NLB 의 기본 Healthcheck 세팅은 Timeout 10초, Interval 30초입니다.
이는 NLB 의 기본 세팅과 같은 값이고 HealthyThresholdCount, UnhealthyThresholdCount 만 pulumi는 각 3회, NLB는 각각 5회, 2회로 약간 다릅니다.
즉, 별다른 세팅을 하지 않았다면 10초 안에 응답이 오지 않았고 이것이 3회 누적되면 unhealthy로 판단하여 서버가 Timeout 이후에 정상적으로 동작하더라도 배포가 Fail 처리 될수 있는 것이지요.
즉 사건의 전말을 파악해보자면, 어떤 사유로 개발환경 신규 배포에 현재 (Timeout + Interval + Timeout + Interval + Timeout) = 50초 가 넘게 걸리는 것이고,
세번의 Unhealthy count 가 누적되었기 때문에 Fail 되어 배포가 실패한것입니다. 스테이징과 상용환경에서는 해당 시간내에 배포가 완료되어서 이슈가 없었던것이구요.
Timeout 과 Interval 을 아래와 같이 수정한 후 에 다시 배포를 진행했고 배포 Success 를 확인했습니다.
전
후
다만 아직 해결하지 못한 의문은, 이전까지 같은 코드로 제한시간내에 배포가 가능했는데 갑자기 왜 그 시간내에 배포가 불가능해졌는지입니다.
스테이징이랑 상용은 개발환경보다 인스턴스 스펙이 높아서 서버 띄우는데 시간이 좀 더 빠르다고 쳐도 개발환경은 그전까지 되다가 왜 안될까 모르겠긴한데,
아무튼 이렇게 수정한 이후로는 배포가 성공하는걸 볼 수 있었습니다.
서버코드에 이상이 없는데 자꾸 배포가 실패하시는 분들은 타겟 그룹 상태검사 설정을 한번 살펴보시기 바랍니다. 등잔밑이 어둡네요.
참고) https://repost.aws/knowledge-center/troubleshoot-unhealthy-checks-ecs
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.