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이 아닌 코드로 종료되는 태스크

더 알아보기 (Learn more)