Amazon ECS 관리형 인스턴스에서 실행되는 Amazon ECS 워크로드를 안전하게 중지
Amazon ECS Task Scale-in Protection을 사용하여 서비스 규모 조정 또는 배포의 스케일 인 이벤트로 인해 태스크가 종료되지 않도록 보호할 수 있습니다.
특정 애플리케이션에는 사용률이 낮은 시간이나 서비스 배포 중에 스케일 인 이벤트로 인해 미션 크리티컬 작업이 종료되지 않도록 보호하는 메커니즘이 필요합니다. 예제:
-
누적 서비스 사용률이 낮더라도 일부 작업을 몇 시간 동안 실행해야 하는 비디오 트랜스코딩 작업과 같은 큐 처리 비동기 애플리케이션이 있습니다.
-
모든 사용자가 로그아웃한 경우에도 서버 재부팅으로 인한 시작 지연 시간을 줄이기 위해 게임 서버를 태스크로 실행하는 게임 애플리케이션이 있습니다.
-
새 코드 버전을 배포할 때는 재처리하는 데 비용이 많이 들기 때문에 작업을 계속 실행해야 합니다.
서비스에 속한 작업이 스케일 인 이벤트로 인해 종료되지 않도록 보호하려면 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 메커니즘
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 엔드포인트 섹션을 참조하세요.
-
Amazon ECS API
애플리케이션에 활성 작업의 상태를 추적하는 구성 요소가 있는 경우 Amazon ECS API를 사용하여 Task scale-in protection을 설정할 수 있습니다.
UpdateTaskProtection을 사용하여 하나 이상의 작업을 보호됨으로 표시합니다.GetTaskProtection을 사용하여 보호 상태를 검색합니다.애플리케이션이 게임 서버 세션을 Amazon ECS 작업으로 호스팅하는 경우를 예로 들 수 있습니다. 사용자가 서버의 세션(작업)에 로그인하면 작업을 보호된 것으로 표시할 수 있습니다. 사용자가 로그아웃한 후에는 서버를 유휴 상태로 유지해야 하는 요구 사항에 따라 이 작업에 대한 보호 설정을 해제하거나 더 이상 활성 세션이 없는 유사한 작업에 대한 보호 설정을 주기적으로 해제할 수 있습니다.
자세한 내용은 Amazon Elastic Container Service API 참조의 UpdateTaskProtection 및 GetTaskProtection을 참조하세요.
두 가지 방법을 결합할 수 있습니다. 예를 들어 Amazon ECS 에이전트 엔드포인트를 사용하여 컨테이너 내에서 작업 보호를 설정하고 Amazon ECS API를 사용하여 외부 컨트롤러 서비스에서 작업 보호를 제거할 수 있습니다.
고려 사항
Task scale-in protection 사용 전에 다음 사항을 고려하세요.
-
Task scale-in protection은 서비스에서 배포된 태스크에서만 지원됩니다.
-
Task Scale-in Protection은 Amazon ECS 관리형 인스턴스에서 실행되는 서비스에서 배포된 태스크에서 지원됩니다.
-
Amazon ECS 에이전트에는 재시도 메커니즘과 더 간단한 인터페이스가 내장되어 있으므로 Amazon ECS 컨테이너 에이전트 엔드포인트를 사용하는 것이 좋습니다.
-
이미 보호 기능이 켜진 작업에서
UpdateTaskProtection을 호출하여 Task scale-in protection 만료 기간을 재설정할 수 있습니다. -
작업이 필요한 작업을 완료하는 데 필요한 시간을 결정하고 그에 따라
expiresInMinutes속성을 설정합니다. 보호 만료를 필요 이상으로 길게 설정하면 비용이 발생하고 새 작업의 배포가 지연될 수 있습니다. -
배포 고려 사항
-
서비스가 롤링 업데이트를 사용하는 경우 새 작업이 생성되지만 이전 버전을 실행하는 작업은
protectionEnabled가 설정 해제되거나 만료될 때까지 종료되지 않습니다. 배포 구성의maximumPercentage파라미터를 이전 작업이 보호될 때 새 작업을 생성할 수 있는 값으로 조정할 수 있습니다. -
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 권한
태스크에는 다음 권한이 있는 Amazon ECS 태스크 역할이 있어야 합니다.
-
ecs:GetTaskProtection: Amazon ECS 컨테이너 에이전트가GetTaskProtection을 호출할 수 있습니다. -
ecs:UpdateTaskProtection: Amazon ECS 컨테이너 에이전트가UpdateTaskProtection을 호출할 수 있습니다.