Amazon ECS 서비스 제한 로직
Amazon ECS 서비스 스케줄러는 태스크 시작이 반복적으로 실패하는 경우 태스크 시작 빈도를 스로틀링하는 로직을 포함합니다. 이를 통해 불필요한 리소스 소비를 방지하고 비용을 절감할 수 있습니다.
서비스의 태스크가 PENDING
에서 RUNNING
상태로 전환되지 않고 대신 STOPPED
로 직접 이동되는 경우 스케줄러는 다음을 수행합니다.
-
재시작 시도 간격을 점진적으로 늘림
-
시도 사이에 지연을 계속 늘림(최대 27분)
-
서비스 이벤트 메시지를 생성하여 사용자에게 문제를 알림
참고
최대 지연 기간인 27분은 향후 업데이트에서 변경될 수 있습니다.
스로틀링이 활성화되면 다음 서비스 이벤트 메시지가 수신됩니다.
(service
service-name
) is unable to consistently start tasks successfully.
스로틀 로직의 중요한 특성:
-
서비스에서 무기한으로 계속해서 재시도함
-
재시작 사이에 늘어나는 시간만 수정 가능
-
사용자가 구성할 수 있는 파라미터가 없음
스로틀링 문제 해결
스로틀링을 해결하기 위해 다음을 수행할 수 있습니다.
-
새로운 태스크 정의를 사용하도록 서비스를 업데이트합니다. 그러면 서비스는 스로틀링되지 않은 정상 작업으로 즉시 돌아갑니다. 자세한 내용은 Amazon ECS 서비스 업데이트 섹션을 참조하세요.
-
태스크 실패의 근본 원인을 해결합니다.
스로틀링을 트리거하는 태스크 실패의 일반적인 원인은 다음과 같습니다.
-
클러스터 리소스(포트, 메모리 또는 CPU) 부족
-
리소스 부족 서비스 이벤트 메시지로 표시됨
-
-
컨테이너 이미지 풀 실패
-
유효하지 않은 이미지 이름, 태그 또는 권한 부족으로 인해 발생할 수 있음
-
Amazon ECS 중지된 작업 오류 보기에서
CannotPullContainerError
발생
-
-
디스크 공간 부족
-
중지된 태스크 오류에서
CannotCreateContainerError
발생 -
해결 단계는 Amazon ECS의 Docker API error (500): devmapper 문제 해결 섹션을 참조하세요.
-
중요
다음 시나리오에서는 스로틀 로직을 트리거하지 않습니다.
-
RUNNING
상태에 도달한 후 중지되는 태스크 -
실패한 Elastic Load Balancing 상태 확인으로 인해 중지되는 태스크
-
RUNNING
상태에 도달한 후 0이 아닌 코드와 함께 컨테이너 명령이 종료되는 태스크