Amazon ECS 서비스 제한(throttle) 로직
Amazon ECS 서비스 제한(throttle) 로직
Amazon ECS 서비스 스케줄러가 태스크가 반복적으로 시작에 실패할 때 태스크 시작을 제한하는 보호 로직을 알아봐요.
출처: 문서
본문
Amazon ECS 서비스 스케줄러는 태스크가 반복적으로 시작에 실패할 때 태스크 시작을 제한(throttle)하는 보호 로직을 포함해요. 이는 불필요한 리소스 소비를 방지하고 비용을 줄이는 데 도움이 돼요. 서비스의 태스크가 PENDING에서 RUNNING 상태로 전환에 실패하고 대신 STOPPED로 직접 이동하면 스케줄러는:
- 재시작 시도 사이의 시간을 점진적으로 늘려요.
- 시도 사이의 최대 27분까지 지연을 계속 늘려요.
- 문제를 알리는 서비스 이벤트 메시지를 생성해요.
참고 — 최대 지연 기간 27분은 향후 업데이트에서 변경될 수 있어요.
제한이 활성화되면 다음 서비스 이벤트 메시지를 받아요:
(service service-name) is unable to consistently start tasks successfully.
제한 로직의 중요한 특성
- 서비스는 재시도 시도를 무기한 계속해요.
- 유일한 수정 사항은 재시작 사이의 시간 증가예요.
- 사용자 구성 가능한 파라미터는 없어요.
제한 문제 해결 (Resolving throttling issues)
제한을 해결하려면 다음을 할 수 있어요:
- 서비스가 새 태스크 정의를 사용하도록 업데이트하면 서비스가 즉시 정상적인 비제한 운영으로 돌아가요. 자세한 내용은 Updating an Amazon ECS service 참고.
- 태스크 실패의 근본 원인을 해결해요.
제한을 트리거하는 태스크 실패의 일반적인 원인은 다음과 같아요:
- 불충분한 클러스터 리소스 (포트, 메모리 또는 CPU) - 불충분한 리소스 서비스 이벤트 메시지로 표시돼요.
- 컨테이너 이미지 가져오기 실패 - 잘못된 이미지 이름, 태그 또는 불충분한 권한으로 인해 발생할 수 있어요. Viewing Amazon ECS stopped task errors에서
CannotPullContainerError로 나타나요. - 불충분한 디스크 공간 - 중지된 태스크 오류에서
CannotCreateContainerError로 나타나요. 해결 단계는 Troubleshoot the Docker API error (500): devmapper in Amazon ECS 참고.
중요 — 다음 시나리오는 제한 로직을 트리거하지 않아요:
RUNNING상태에 도달한 후 중지되는 태스크- 실패한 Elastic Load Balancing 상태 검사로 인해 중지된 태스크
RUNNING상태에 도달한 후 컨테이너 명령이 0이 아닌 코드로 종료되는 태스크