Amazon ECS 작업이 스케일 인 이벤트로 인해 종료되지 않도록 보호 - Amazon Elastic Container Service

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 참조의 UpdateTaskProtectionGetTaskProtection을 참조하세요.

두 가지 방법을 결합할 수 있습니다. 예를 들어 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을 호출할 수 있습니다.