Amazon ECS에서 컨테이너 헬스 체크 설정 및 관리하기

숭맹이·2025년 2월 3일
0

1. 헬스 체크란 무엇인가?

헬스 체크는 컨테이너 내부에서 실행되는 명령어로, 애플리케이션의 상태를 검증하는 역할을 합니다. 헬스 체크를 통해 ECS는 애플리케이션이 정상적으로 동작하고 있는지 판단하고, 문제가 발생한 경우 이를 감지하여 적절한 조치를 취할 수 있습니다.

2. ECS 헬스 체크 설정하기

ECS에서 헬스 체크는 태스크 정의(Task Definition)에 설정됩니다. 중요한 점은 컨테이너 이미지에 포함된 Docker 헬스 체크는 ECS가 인식하지 못하며, 반드시 컨테이너 정의(Container Definition)에 명시해야 ECS가 이를 모니터링합니다.

2.1 헬스 체크 파라미터

헬스 체크를 정의할 때 다음과 같은 파라미터를 설정할 수 있습니다:

  • Command: 헬스 체크로 실행할 명령어입니다. CMD로 직접 명령어를 실행하거나, CMD-SHELL로 셸을 통해 실행할 수 있습니다.

    "healthCheck": {
      "command": ["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
    }
  • Interval: 헬스 체크를 실행하는 주기(초 단위)입니다.

  • Timeout: 헬스 체크 성공을 기다리는 최대 시간(초 단위)입니다.

  • Retries: 헬스 체크 실패 시 재시도 횟수입니다.

  • Start Period: 컨테이너가 초기화되는 동안 헬스 체크 실패를 무시하는 유예 기간입니다.

2.2 헬스 체크 명령어 예제

"healthCheck": {
  "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
  "interval": 30,
  "timeout": 5,
  "retries": 3,
  "startPeriod": 60
}

3. 헬스 체크 상태 값 이해하기

ECS는 헬스 체크 결과에 따라 다음과 같은 상태를 보고합니다:

  • HEALTHY: 헬스 체크가 성공적으로 통과된 경우.
  • UNHEALTHY: 헬스 체크가 실패한 경우.
  • UNKNOWN: 헬스 체크가 정의되지 않았거나, 상태를 알 수 없는 경우.

3.1 헬스 체크 상태 결정 규칙

ECS 태스크 상태는 필수(essential) 컨테이너의 헬스 체크 상태에 따라 결정됩니다:

  1. 하나라도 필수 컨테이너가 UNHEALTHY이면, 태스크 상태는 UNHEALTHY입니다.
  2. 하나라도 필수 컨테이너가 UNKNOWN이면, 태스크 상태는 UNKNOWN입니다.
  3. 모든 필수 컨테이너가 HEALTHY이면, 태스크 상태는 HEALTHY입니다.

3.2 헬스 체크 상태 예제

2개 필수 컨테이너의 경우:

컨테이너 1 상태컨테이너 2 상태태스크 상태
UNHEALTHYUNKNOWNUNHEALTHY
UNHEALTHYHEALTHYUNHEALTHY
HEALTHYUNKNOWNUNKNOWN
HEALTHYHEALTHYHEALTHY

3개 컨테이너의 경우:

컨테이너 1 상태컨테이너 2 상태컨테이너 3 상태태스크 상태
UNHEALTHYUNKNOWNUNKNOWNUNHEALTHY
UNHEALTHYUNKNOWNHEALTHYUNHEALTHY
UNHEALTHYHEALTHYHEALTHYUNHEALTHY
HEALTHYUNKNOWNHEALTHYUNKNOWN
HEALTHYUNKNOWNUNKNOWNUNKNOWN
HEALTHYHEALTHYHEALTHYHEALTHY

4. 헬스 체크와 ECS 에이전트 연결 상태

ECS 컨테이너 에이전트가 Amazon ECS 서비스와 연결이 끊긴 경우, 컨테이너 상태는 UNHEALTHY로 전환되지 않습니다. 이는 에이전트 재시작이나 일시적인 네트워크 불안정 상황에서도 컨테이너가 중단되지 않도록 설계된 것입니다.

  • 연결이 끊긴 동안에는 마지막으로 보고된 헬스 체크 상태가 유지됩니다.
  • 에이전트가 다시 연결되면 새로운 헬스 체크가 수행되고 상태가 업데이트됩니다.

5. 헬스 체크 설정 시 고려사항

  • ECS 에이전트 버전: 헬스 체크 기능은 ECS 에이전트 1.17.0 이상에서 지원됩니다.
  • Fargate 지원: Fargate 태스크에서는 Linux 플랫폼 버전 1.1.0 이상, Windows 플랫폼 버전 1.1.0 이상에서 헬스 체크가 지원됩니다.
  • 명령어 포함: 헬스 체크 명령어는 반드시 컨테이너 이미지 내에 포함되어 있어야 합니다.
profile
👨🏻‍💻 Backend Developer

0개의 댓글