데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AWS 서버 배포 중 어이없는 실수 - Health Check 관련

      nabbang 23.09.11
      7,724 19 1
      DEVOTEE 요약
      팀에서는 AWS ECS 위 Fargate Container로 서버를 관리하고 있으며, 코드 수정사항이 형상관리협업도구(Github)에 반영되면 CI/CD를 통해 ECR에 새로운 도커 이미지가 배포되고 해당 이미지를 바라보도록 ECS Service Update가 진행됩니다. 최근 배포시 개발환경에서만 배포에 실패하는 문제가 발생했고, 이는 Health check 실패를 원인으로 하는 것으로 파악되었습니다. 이 문제는 타겟 그룹의 Healthcheck 설정을 확인하여 해결할 수 있었습니다.

      현재 팀에서 관리하고 있는 서버는 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

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      nabbang 님의 최신 블로그

      더보기
      동영상 기고하기