Amazon ECS 작업이 스케일 인 이벤트로 인해 종료되지 않도록 보호
Amazon ECS 작업 축소 보호를 사용하여 서비스 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
옵션을 지정할 수 있습니다.
작업 축소 보호 메커니즘
Amazon ECS 컨테이너 에이전트 엔드포인트 또는 Amazon ECS API를 사용하여 작업 축소 보호를 설정하고 가져올 수 있습니다.
-
Amazon ECS 컨테이너 에이전트 엔드포인트
보호 필요성을 스스로 결정할 수 있는 작업에는 Amazon ECS 컨테이너 에이전트 엔드포인트를 사용하는 것이 좋습니다. 대기열 기반 또는 작업 처리 워크로드에 이 접근 방식을 사용합니다.
예를 들어, 컨테이너가 SQS 메시지를 사용하여 작업 처리를 시작하면 컨테이너 내에서 작업 축소 보호 엔드포인트 경로
$ECS_AGENT_URI/task-protection/v1/state
를 통해ProtectionEnabled
속성을 설정할 수 있습니다. Amazon ECS는 스케일 인 이벤트 중에 이 작업을 종료하지 않습니다. 작업이 완료된 후 동일한 엔드포인트를 사용하여ProtectionEnabled
속성 선택을 해제하여 후속 스케일 인 이벤트 중에 작업을 종료할 수 있습니다.Amazon ECS 컨테이너 에이전트 엔드포인트 사용에 대한 자세한 내용은 Amazon ECS 작업 축소 보호 엔드포인트 섹션을 참조하세요.
-
Amazon ECS API
애플리케이션에 활성 작업의 상태를 추적하는 구성 요소가 있는 경우 Amazon ECS API를 사용하여 작업 축소 보호를 설정할 수 있습니다.
UpdateTaskProtection
을 사용하여 하나 이상의 작업을 보호됨으로 표시합니다.GetTaskProtection
을 사용하여 보호 상태를 검색합니다.애플리케이션이 게임 서버 세션을 Amazon ECS 작업으로 호스팅하는 경우를 예로 들 수 있습니다. 사용자가 서버의 세션(작업)에 로그인하면 작업을 보호된 것으로 표시할 수 있습니다. 사용자가 로그아웃한 후에는 서버를 유휴 상태로 유지해야 하는 요구 사항에 따라 이 작업에 대한 보호 설정을 해제하거나 더 이상 활성 세션이 없는 유사한 작업에 대한 보호 설정을 주기적으로 해제할 수 있습니다.
자세한 내용은 Amazon Elastic Container Service API 참조의 UpdateTaskProtection 및 GetTaskProtection을 참조하세요.
두 가지 방법을 결합할 수 있습니다. 예를 들어 Amazon ECS 에이전트 엔드포인트를 사용하여 컨테이너 내에서 작업 보호를 설정하고 Amazon ECS API를 사용하여 외부 컨트롤러 서비스에서 작업 보호를 제거할 수 있습니다.
고려 사항
작업 축소 보호 사용 전에 다음 사항을 고려하세요.
-
Amazon ECS 에이전트에는 재시도 메커니즘과 더 간단한 인터페이스가 내장되어 있으므로 Amazon ECS 컨테이너 에이전트 엔드포인트를 사용하는 것이 좋습니다.
-
이미 보호 기능이 켜진 작업에서
UpdateTaskProtection
을 호출하여 작업 스케일 인 보호 만료 기간을 재설정할 수 있습니다. -
작업이 필요한 작업을 완료하는 데 필요한 시간을 결정하고 그에 따라
expiresInMinutes
속성을 설정합니다. 보호 만료를 필요 이상으로 길게 설정하면 비용이 발생하고 새 작업의 배포가 지연될 수 있습니다. -
작업 스케일 인 보호는 Amazon ECS 컨테이너 에이전트
1.65.0
이상에서 지원됩니다.에이전트를 최신 버전으로 업데이트하여 이전 버전의 Amazon ECS 컨테이너 인스턴스를 사용하여 Amazon EC2 인스턴스에서 이 기능에 대한 지원을 추가할 수 있습니다. 자세한 내용은 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요.
-
배포 고려 사항
-
서비스가 롤링 업데이트를 사용하는 경우 새 작업이 생성되지만 이전 버전을 실행하는 작업은
protectionEnabled
가 설정 해제되거나 만료될 때까지 종료되지 않습니다. 배포 구성의maximumPercentage
파라미터를 이전 작업이 보호될 때 새 작업을 생성할 수 있는 값으로 조정할 수 있습니다. -
블루/그린 업데이트가 적용된 경우 작업에
protectionEnabled
가 있으면 보호된 작업이 있는 블루 배포는 제거되지 않습니다. 트래픽은 새로 가동되는 작업으로 전환되고 이전 작업은protectionEnabled
가 해제되거나 만료된 경우에만 제거됩니다. CodeDeploy 또는 CloudFormation 업데이트의 제한 시간에 따라 배포 시간이 초과될 수 있으며 이전 Blue 작업이 여전히 존재할 수 있습니다. -
CloudFormation을 사용하는 경우 업데이트 스택의 제한 시간은 3시간입니다. 따라서 작업 보호를 3시간 이상으로 설정하면 CloudFormation 배포가 실패하고 롤백이 발생할 수 있습니다.
이전 작업이 보호되는 동안 CloudFormation 스택은
UPDATE_IN_PROGRESS
를 표시합니다. 작업 스케일 인 보호가 제거되거나 3시간 내에 만료되면 배포가 성공하고UPDATE_COMPLETE
상태로 전환됩니다. 배포가 3시간 이상UPDATE_IN_PROGRESS
상태로 유지되면 실패하고UPDATE_FAILED
상태가 표시되며, 이전 작업 세트로 롤백됩니다. -
Amazon ECS는 보호 대상 작업으로 인해 배포(롤링 또는 블루/그린)가 안정 상태에 도달하지 못하는 경우 서비스 이벤트를 전송하여 수정 조치를 취할 수 있도록 합니다. 작업의 보호 상태를 업데이트하려고 시도하는 동안
DEPLOYMENT_BLOCKED
오류 메시지가 표시되면 서비스에 대해 바람직한 작업 수보다 보호되는 작업 수가 많음을 의미합니다. 이 오류를 해결하려면 다음 중 하나 이상을 수행합니다.-
현재 작업 보호가 만료될 때까지 기다립니다. 그런 다음 작업 보호를 설정합니다.
-
중지할 수 있는 작업을 확인합니다. 그런 다음 이러한 작업에 대해
protectionEnabled
옵션을false
로 설정한 상태에서UpdateTaskProtection
을 사용합니다. -
서비스의 바람직한 작업 수를 보호되는 작업 수 이상으로 늘립니다.
-
-
작업 축소 보호에 필요한 IAM 권한
태스크에는 다음 권한이 있는 Amazon ECS 태스크 역할이 있어야 합니다.
-
ecs:GetTaskProtection
: Amazon ECS 컨테이너 에이전트가GetTaskProtection
을 호출할 수 있습니다. -
ecs:UpdateTaskProtection
: Amazon ECS 컨테이너 에이전트가UpdateTaskProtection
을 호출할 수 있습니다.