

# Amazon ECS 서비스 제한 로직
<a name="service-throttle-logic"></a>

Amazon ECS 서비스 스케줄러는 태스크 시작이 반복적으로 실패하는 경우 태스크 시작 빈도를 스로틀링하는 로직을 포함합니다. 이를 통해 불필요한 리소스 소비를 방지하고 비용을 절감할 수 있습니다.

서비스의 태스크가 `PENDING`에서 `RUNNING` 상태로 전환되지 않고 대신 `STOPPED`로 직접 이동되는 경우 스케줄러는 다음을 수행합니다.
+ 재시작 시도 간격을 점진적으로 늘림
+ 시도 사이에 지연을 계속 늘림(최대 27분)
+ 서비스 이벤트 메시지를 생성하여 사용자에게 문제를 알림

**참고**  
최대 지연 기간인 27분은 향후 업데이트에서 변경될 수 있습니다.

스로틀링이 활성화되면 다음 서비스 이벤트 메시지가 수신됩니다.

```
(service {{service-name}}) is unable to consistently start tasks successfully.
```

스로틀 로직의 중요한 특성:
+ 서비스에서 무기한으로 계속해서 재시도함
+ 재시작 사이에 늘어나는 시간만 수정 가능
+ 사용자가 구성할 수 있는 파라미터가 없음

## 스로틀링 문제 해결
<a name="resolving-throttling"></a>

스로틀링을 해결하기 위해 다음을 수행할 수 있습니다.
+ 새로운 태스크 정의를 사용하도록 서비스를 업데이트합니다. 그러면 서비스는 스로틀링되지 않은 정상 작업으로 즉시 돌아갑니다. 자세한 내용은 [Amazon ECS 서비스 업데이트](update-service-console-v2.md) 섹션을 참조하세요.
+ 태스크 실패의 근본 원인을 해결합니다.

스로틀링을 트리거하는 태스크 실패의 일반적인 원인은 다음과 같습니다.
+ 클러스터 리소스(포트, 메모리 또는 CPU) 부족
  + [리소스 부족 서비스 이벤트 메시지](service-event-messages-list.md#service-event-messages-1)로 표시됨
+ 컨테이너 이미지 풀 실패
  + 유효하지 않은 이미지 이름, 태그 또는 권한 부족으로 인해 발생할 수 있음
  + [Amazon ECS 중지된 작업 오류 보기](stopped-task-errors.md)에서 `CannotPullContainerError` 발생
+ 디스크 스페이스 부족
  + [중지된 태스크 오류](stopped-task-errors.md)에서 `CannotCreateContainerError` 발생
  + 해결 단계는 [Amazon ECS의 Docker `API error (500): devmapper` 문제 해결](CannotCreateContainerError.md) 섹션을 참조하세요.

**중요**  
다음 시나리오에서는 스로틀 로직을 트리거하지 않습니다.  
`RUNNING` 상태에 도달한 후 중지되는 태스크
실패한 Elastic Load Balancing 상태 확인으로 인해 중지되는 태스크
`RUNNING` 상태에 도달한 후 0이 아닌 코드와 함께 컨테이너 명령이 종료되는 태스크