헬스 체크는 컨테이너 내부에서 실행되는 명령어로, 애플리케이션의 상태를 검증하는 역할을 합니다. 헬스 체크를 통해 ECS는 애플리케이션이 정상적으로 동작하고 있는지 판단하고, 문제가 발생한 경우 이를 감지하여 적절한 조치를 취할 수 있습니다.
ECS에서 헬스 체크는 태스크 정의(Task Definition)에 설정됩니다. 중요한 점은 컨테이너 이미지에 포함된 Docker 헬스 체크는 ECS가 인식하지 못하며, 반드시 컨테이너 정의(Container Definition)에 명시해야 ECS가 이를 모니터링합니다.
헬스 체크를 정의할 때 다음과 같은 파라미터를 설정할 수 있습니다:
Command: 헬스 체크로 실행할 명령어입니다. CMD
로 직접 명령어를 실행하거나, CMD-SHELL
로 셸을 통해 실행할 수 있습니다.
"healthCheck": {
"command": ["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
}
Interval: 헬스 체크를 실행하는 주기(초 단위)입니다.
Timeout: 헬스 체크 성공을 기다리는 최대 시간(초 단위)입니다.
Retries: 헬스 체크 실패 시 재시도 횟수입니다.
Start Period: 컨테이너가 초기화되는 동안 헬스 체크 실패를 무시하는 유예 기간입니다.
"healthCheck": {
"command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
"interval": 30,
"timeout": 5,
"retries": 3,
"startPeriod": 60
}
ECS는 헬스 체크 결과에 따라 다음과 같은 상태를 보고합니다:
ECS 태스크 상태는 필수(essential) 컨테이너의 헬스 체크 상태에 따라 결정됩니다:
2개 필수 컨테이너의 경우:
컨테이너 1 상태 | 컨테이너 2 상태 | 태스크 상태 |
---|---|---|
UNHEALTHY | UNKNOWN | UNHEALTHY |
UNHEALTHY | HEALTHY | UNHEALTHY |
HEALTHY | UNKNOWN | UNKNOWN |
HEALTHY | HEALTHY | HEALTHY |
3개 컨테이너의 경우:
컨테이너 1 상태 | 컨테이너 2 상태 | 컨테이너 3 상태 | 태스크 상태 |
---|---|---|---|
UNHEALTHY | UNKNOWN | UNKNOWN | UNHEALTHY |
UNHEALTHY | UNKNOWN | HEALTHY | UNHEALTHY |
UNHEALTHY | HEALTHY | HEALTHY | UNHEALTHY |
HEALTHY | UNKNOWN | HEALTHY | UNKNOWN |
HEALTHY | UNKNOWN | UNKNOWN | UNKNOWN |
HEALTHY | HEALTHY | HEALTHY | HEALTHY |
ECS 컨테이너 에이전트가 Amazon ECS 서비스와 연결이 끊긴 경우, 컨테이너 상태는 UNHEALTHY로 전환되지 않습니다. 이는 에이전트 재시작이나 일시적인 네트워크 불안정 상황에서도 컨테이너가 중단되지 않도록 설계된 것입니다.