컨테이너 상태 확인으로 Amazon ECS 태스크 상태 결정하기
컨테이너 상태 확인으로 Amazon ECS 태스크 상태 결정하기
태스크 정의를 만들 때 컨테이너에 대한 상태 확인(health check)을 구성할 수 있어요. 상태 확인은 컨테이너에서 로컬로 실행되어 애플리케이션의 상태와 가용성을 검증하는 명령입니다. Amazon ECS 컨테이너 에이전트는 태스크 정의에 지정된 상태 확인만 모니터링하고 보고해요. Amazon ECS는 컨테이너 이미지에 내장되어 있지만 컨테이너 정의에 지정되지 않은 Docker 상태 확인은 모니터링하지 않습니다. 컨테이너 정의에 지정된 상태 확인 파라미터는 컨테이너 이미지에 존재하는 Docker 상태 확인을 재정의해요.
출처: 문서
본문
태스크 정의에 상태 확인이 정의되면 컨테이너는 컨테이너 안에서 상태 확인 프로세스를 실행한 다음, 종료 코드를 평가해 애플리케이션 상태를 결정해요. 상태 확인은 다음 파라미터로 구성됩니다:
- Command – 컨테이너가 정상인지 판단하기 위해 실행하는 명령. 문자열 배열은 명령 인수를 직접 실행하는
CMD로 시작하거나, 컨테이너의 기본 셸로 명령을 실행하는CMD-SHELL로 시작할 수 있어요. 파이프, 리다이렉트, 명령 체이닝, 환경 변수 확장 같은 셸 기능이 필요할 때는CMD-SHELL을 사용하세요. 예를 들어CMD-SHELL을 사용하면 셸이||연산자를 해석하는curl -f http://localhost/ || exit 1같은 명령을 쓸 수 있어요. 셸 해석이 필요 없는 단순한 명령에는CMD를 사용합니다. - Interval – 각 상태 확인 사이의 시간 간격(초).
- Timeout – 상태 확인이 성공하기를 기다리는 시간(초). 이 시간이 지나면 실패로 간주돼요.
- Retries – 컨테이너가 비정상으로 간주되기 전에 실패한 상태 확인을 재시도하는 횟수.
- Start period – 선택적인 유예 기간으로, 실패한 상태 확인이 최대 재시도 횟수에 집계되기 전에 컨테이너가 부트스트랩할 시간을 제공해요.
startPeriod안에 상태 확인이 성공하면 컨테이너는 정상으로 간주되고, 이후의 실패는 최대 재시도 횟수에 집계됩니다.
태스크 정의에서 상태 확인을 지정하는 방법은 상태 확인(Health check)을 참고하세요. 컨테이너의 가능한 상태 값은 다음과 같아요:
HEALTHY– 컨테이너 상태 확인이 성공적으로 통과했어요.UNHEALTHY– 컨테이너 상태 확인이 실패했습니다.UNKNOWN– 컨테이너 상태 확인이 평가 중이거나, 컨테이너 상태 확인이 정의되지 않았거나, Amazon ECS가 컨테이너의 상태를 갖고 있지 않아요.
상태 확인 명령은 컨테이너에서 실행되므로, 명령을 컨테이너 이미지에 포함해야 해요. 상태 확인은 컨테이너의 루프백 인터페이스인 localhost 또는 127.0.0.1을 통해 애플리케이션에 연결합니다. 종료 코드 0은 성공을, 0이 아닌 종료 코드는 실패를 나타내요.
컨테이너 상태 확인을 사용할 때 다음을 고려하세요:
- 컨테이너 상태 확인은 Amazon ECS 컨테이너 에이전트 버전 1.17.0 이상이 필요해요.
- 컨테이너 상태 확인은 Linux 플랫폼 버전 1.1.0 이상 또는 Windows 플랫폼 버전 1.1.0 이상을 사용한다면 Fargate 태스크에서 지원됩니다.
Amazon ECS가 태스크 상태를 결정하는 방법
Essential이면서 태스크 정의에 상태 확인 명령이 있는 컨테이너만 태스크 상태를 결정하는 데 고려돼요. 다음 규칙이 순서대로 평가됩니다:
- 하나의 essential 컨테이너 상태가
UNHEALTHY이면 태스크 상태는UNHEALTHY예요. - 하나의 essential 컨테이너 상태가
UNKNOWN이면 태스크 상태는UNKNOWN입니다. - 모든 essential 컨테이너 상태가
HEALTHY이면 태스크 상태는HEALTHY예요.
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 |
상태 확인이 에이전트 연결 끊김의 영향을 받는 방식
Amazon ECS 컨테이너 에이전트가 Amazon ECS 서비스와 연결이 끊어져도 컨테이너가 UNHEALTHY 상태로 전환되지는 않아요. 이는 설계상 의도된 것으로, 에이전트 재시작이나 일시적인 사용 불가 동안에도 컨테이너가 계속 실행되도록 보장하기 위한 것입니다. 상태 확인 상태는 Amazon ECS 에이전트의 "마지막으로 들은(last heard from)" 응답이므로, 연결이 끊기기 전에 컨테이너가 HEALTHY로 간주되었다면 그 상태는 에이전트가 다시 연결되고 다른 상태 확인이 발생할 때까지 유지됩니다. 컨테이너 상태 확인 상태에 대한 어떤 가정도 이루어지지 않아요.