

# Amazon ECS 작업이 스케일 인 이벤트로 인해 종료되지 않도록 보호
<a name="task-scale-in-protection"></a>

Amazon ECS task scale-in protection을 사용하여 서비스 Auto Scaling 또는 배포의 스케일 인 이벤트로 인해 작업이 종료되지 않도록 보호할 수 있습니다.

특정 애플리케이션에는 사용률이 낮은 시간이나 서비스 배포 중에 스케일 인 이벤트로 인해 미션 크리티컬 작업이 종료되지 않도록 보호하는 메커니즘이 필요합니다. 예제:
+ 누적 서비스 사용률이 낮더라도 일부 작업을 몇 시간 동안 실행해야 하는 비디오 트랜스코딩 작업과 같은 큐 처리 비동기 애플리케이션이 있습니다.
+ 모든 사용자가 로그아웃한 경우에도 서버 재부팅으로 인한 시작 지연 시간을 줄이기 위해 게임 서버를 Amazon ECS 작업으로 실행하는 게임 애플리케이션이 있습니다.
+ 새 코드 버전을 배포할 때는 재처리하는 데 비용이 많이 들기 때문에 작업을 계속 실행해야 합니다.

서비스에 속한 작업이 스케일 인 이벤트로 인해 종료되지 않도록 보호하려면 `ProtectionEnabled` 속성을 `true`로 설정합니다. `ProtectionEnabled`을 true로 설정하면 작업이 기본적으로 2시간 동안 보호됩니다. 그러면 `ExpiresInMinutes` 속성을 사용하여 보호 기간을 사용자 지정할 수 있습니다. 최소 1분, 최대 2,880분(48시간) 동안 작업을 보호할 수 있습니다. AWS CLI를 사용하는 경우 `--protection-enabled` 옵션을 지정할 수 있습니다.

작업이 필요한 작업을 완료한 후 `ProtectionEnabled` 속성을 `false`로 설정하여 후속 스케일 인 이벤트에 의해 작업이 종료되도록 할 수 있습니다. AWS CLI를 사용하는 경우 `--no-protection-enabled` 옵션을 지정할 수 있습니다.

## Task scale-in protection 메커니즘
<a name="task-scale-in-protection-mechanisms"></a>

Amazon ECS 컨테이너 에이전트 엔드포인트 또는 Amazon ECS API를 사용하여 Task scale-in protection을 설정하고 가져올 수 있습니다.
+ **Amazon ECS 컨테이너 에이전트 엔드포인트**

  보호 필요성을 스스로 결정할 수 있는 작업에는 Amazon ECS 컨테이너 에이전트 엔드포인트를 사용하는 것이 좋습니다. 대기열 기반 또는 작업 처리 워크로드에 이 접근 방식을 사용합니다.

  예를 들어, 컨테이너가 SQS 메시지를 사용하여 작업 처리를 시작하면 컨테이너 내에서 Task scale-in protection 엔드포인트 경로 `$ECS_AGENT_URI/task-protection/v1/state`를 통해 `ProtectionEnabled` 속성을 설정할 수 있습니다. Amazon ECS는 스케일 인 이벤트 중에 이 작업을 종료하지 않습니다. 작업이 완료된 후 동일한 엔드포인트를 사용하여 `ProtectionEnabled` 속성 선택을 해제하여 후속 스케일 인 이벤트 중에 작업을 종료할 수 있습니다.

  Amazon ECS 컨테이너 에이전트 엔드포인트 사용에 대한 자세한 내용은 [Amazon ECS task scale-in protection 엔드포인트](task-scale-in-protection-endpoint.md) 섹션을 참조하세요.
+ **Amazon ECS API**

  애플리케이션에 활성 작업의 상태를 추적하는 구성 요소가 있는 경우 Amazon ECS API를 사용하여 Task scale-in protection을 설정할 수 있습니다. `UpdateTaskProtection`을 사용하여 하나 이상의 작업을 보호됨으로 표시합니다. `GetTaskProtection`을 사용하여 보호 상태를 검색합니다.

  애플리케이션이 게임 서버 세션을 Amazon ECS 작업으로 호스팅하는 경우를 예로 들 수 있습니다. 사용자가 서버의 세션(작업)에 로그인하면 작업을 보호된 것으로 표시할 수 있습니다. 사용자가 로그아웃한 후에는 서버를 유휴 상태로 유지해야 하는 요구 사항에 따라 이 작업에 대한 보호 설정을 해제하거나 더 이상 활성 세션이 없는 유사한 작업에 대한 보호 설정을 주기적으로 해제할 수 있습니다.

  자세한 내용은 Amazon Elastic Container Service API 참조의 [UpdateTaskProtection](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateTaskProtection.html) 및 [GetTaskProtection](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_GetTaskProtection.html)을 참조하세요**.

두 가지 방법을 결합할 수 있습니다. 예를 들어 Amazon ECS 에이전트 엔드포인트를 사용하여 컨테이너 내에서 작업 보호를 설정하고 Amazon ECS API를 사용하여 외부 컨트롤러 서비스에서 작업 보호를 제거할 수 있습니다.

## 고려 사항
<a name="task-scale-in-protection-considerations"></a>

Task scale-in protection 사용 전에 다음 사항을 고려하세요.
+ Task scale-in protection은 서비스에서 배포된 태스크에서만 지원됩니다.
+ Task Scale-in Protection은 Amazon ECS 관리형 인스턴스에서 실행되는 서비스에서 배포된 태스크에서 지원됩니다.
+ Amazon ECS 에이전트에는 재시도 메커니즘과 더 간단한 인터페이스가 내장되어 있으므로 Amazon ECS 컨테이너 에이전트 엔드포인트를 사용하는 것이 좋습니다.
+ 이미 보호 기능이 켜진 작업에서 `UpdateTaskProtection`을 호출하여 Task scale-in protection 만료 기간을 재설정할 수 있습니다.
+ 작업이 필요한 작업을 완료하는 데 필요한 시간을 결정하고 그에 따라 `expiresInMinutes` 속성을 설정합니다. 보호 만료를 필요 이상으로 길게 설정하면 비용이 발생하고 새 작업의 배포가 지연될 수 있습니다.
+ Task scale-in protection은 Amazon ECS 컨테이너 에이전트 `1.65.0` 이상에서 지원됩니다. 에이전트를 최신 버전으로 업데이트하여 이전 버전의 Amazon ECS 컨테이너 인스턴스를 사용하여 Amazon EC2 인스턴스에서 이 기능에 대한 지원을 추가할 수 있습니다. 자세한 내용은 [Amazon ECS 컨테이너 에이전트 업데이트](ecs-agent-update.md) 섹션을 참조하세요.
+ 배포 고려 사항
  + 서비스가 롤링 업데이트를 사용하는 경우 새 작업이 생성되지만 이전 버전을 실행하는 작업은 `protectionEnabled`가 설정 해제되거나 만료될 때까지 종료되지 않습니다. 배포 구성의 `maximumPercentage` 파라미터를 이전 작업이 보호될 때 새 작업을 생성할 수 있는 값으로 조정할 수 있습니다.
  + 블루/그린 업데이트가 적용된 경우 작업에 `protectionEnabled`가 있으면 보호된 작업이 있는 블루 배포는 제거되지 않습니다. 트래픽은 새로 가동되는 작업으로 전환되고 이전 작업은 `protectionEnabled`가 해제되거나 만료된 경우에만 제거됩니다. CodeDeploy 또는 CloudFormation 업데이트의 제한 시간에 따라 배포 시간이 초과될 수 있으며 이전 Blue 작업이 여전히 존재할 수 있습니다.
  + CloudFormation을 사용하는 경우 업데이트 스택의 제한 시간은 3시간입니다. 따라서 작업 보호를 3시간 이상으로 설정하면 CloudFormation 배포가 실패하고 롤백이 발생할 수 있습니다.

    이전 작업이 보호되는 동안 CloudFormation 스택은 `UPDATE_IN_PROGRESS`를 표시합니다. Task scale-in protection이 제거되거나 3시간 내에 만료되면 배포가 성공하고 `UPDATE_COMPLETE` 상태로 전환됩니다. 배포가 3시간 이상 `UPDATE_IN_PROGRESS` 상태로 유지되면 실패하고 `UPDATE_FAILED` 상태가 표시되며, 이전 작업 세트로 롤백됩니다.
  + Amazon ECS는 보호 대상 작업으로 인해 배포(롤링 또는 블루/그린)가 안정 상태에 도달하지 못하는 경우 서비스 이벤트를 전송하여 수정 조치를 취할 수 있도록 합니다. 작업의 보호 상태를 업데이트하려고 시도하는 동안 `DEPLOYMENT_BLOCKED` 오류 메시지가 표시되면 서비스에 대해 바람직한 작업 수보다 보호되는 작업 수가 많음을 의미합니다. 이 오류를 해결하려면 다음 중 하나 이상을 수행합니다.
    + 현재 작업 보호가 만료될 때까지 기다립니다. 그런 다음 작업 보호를 설정합니다.
    + 중지할 수 있는 작업을 확인합니다. 그런 다음 이러한 작업에 대해 `protectionEnabled` 옵션을 `false`로 설정한 상태에서 `UpdateTaskProtection`을 사용합니다.
    + 서비스의 바람직한 작업 수를 보호되는 작업 수 이상으로 늘립니다.

## Task scale-in protection에 필요한 IAM 권한
<a name="task-scale-in-protection-iam"></a>

태스크에는 다음 권한이 있는 Amazon ECS 태스크 역할이 있어야 합니다.
+ `ecs:GetTaskProtection`: Amazon ECS 컨테이너 에이전트가 `GetTaskProtection`을 호출할 수 있습니다.
+ `ecs:UpdateTaskProtection`: Amazon ECS 컨테이너 에이전트가 `UpdateTaskProtection`을 호출할 수 있습니다.