조기 성공 기준으로 Amazon ECS 롤링 배포 조기 완료

조기 성공 기준으로 Amazon ECS 롤링 배포 조기 완료

롤링 배포 전략을 사용하는 서비스를 업데이트하면, Amazon ECS는 소스 서비스 개정의 태스크를 대상 서비스 개정의 새 태스크로 교체하는 배포를 시작해요. Amazon ECS는 다음이 모두 참이 된 후에 배포를 완료해요.

출처: 문서

본문

  • 대상 서비스 개정이 desired count의 100%에 도달하고, 모든 태스크가 실행되고 정상이에요.
  • 배포 회로 차단기(deployment circuit breaker)나 CloudWatch 알람이 롤백을 트리거하지 않아요.
  • 알람 기반 롤백을 사용한다면 베이크 시간(bake time)이 경과해요.
  • 소스 서비스 개정의 태스크가 정리돼요.

조기 성공 기준(early success criteria)을 사용하면 워크로드의 신뢰도와 운영 요구에 따라 Amazon ECS가 배포를 완료하는 시점을 구성할 수 있어요. 조기 성공 기준은 다음 시나리오에서 사용할 수 있어요.

  • 대상 서비스 개정의 정상 태스크 일정 비율이면 배포를 완료하기에 충분하다고 확신하고, 후속 배포, CI/CD 파이프라인, 기타 종속 작업이 진행될 수 있도록 더 빨리 완료하고 싶어요.
  • 서비스가 GPU 가속 추론 워크로드처럼 특수하거나 제약이 있는 용량에서 실행되어, 하드웨어 가용성 때문에 일부 태스크 실행이 더 오래 걸려요.
  • 서비스에 드레이닝이 느려 배포를 계속 열어 두게 만드는 소스 서비스 개정의 태스크(예: 장기 연결 태스크)가 있어요.
  • 배포 회로 차단기나 CloudWatch 알람 롤백이 대상 서비스 개정이 사용자가 정의한 상태 수준에 도달할 때까지 배포를 보호하길 원하고, 그 시점 이후에는 롤백을 원하지 않아요.

배포 구성에서 다음 설정을 사용해 기준을 정의해요.

정상 비율 (Healthy percent)

earlySuccessCriteria.healthyPercent는 Amazon ECS가 배포를 완료하기 전에 대상 서비스 개정에서 실행되고 정상이어야 하는 태스크 수를 서비스의 desired task 수에 대한 백분율로 나타내요. 이 값은 올림(round up)돼요. 예를 들어 정상 비율이 90이고 desired count가 100이라면, Amazon ECS는 90개 태스크가 정상이 된 후 배포를 완료해요. 정상 비율이 50이고 desired count가 3이라면, Amazon ECS는 2개 태스크가 정상이 된 후 배포를 완료해요.

  • 태스크는 서비스에 구성한 상태 검사를 통과할 때 정상이에요.
  • Amazon ECS는 배포 외부에서 일반 서비스 스케일링을 통해 대상 서비스 개정의 나머지 태스크를 실행해요. Amazon ECS가 배포를 완료한 후에는 배포 회로 차단기와 CloudWatch 알람 롤백이 더 이상 적용되지 않아요.
  • 정상 비율은 서비스의 minimumHealthyPercent와 100 사이여야 해요.

소스 서비스 개정 정리 (Source service revision cleanup)

earlySuccessCriteria.sourceServiceRevisionCleanup은 Amazon ECS가 소스 서비스 개정의 태스크를 정리하는 시점을 결정해요. BLOCKING과 DEFERRED 두 값이 있어요.

  • BLOCKING 사용 시 배포는 다음 순서로 진행돼요:
    1. 정상 비율만큼의 태스크가 대상 서비스 개정에서 실행되고 정상이 돼요.
    2. 알람 기반 롤백을 사용한다면 베이크 시간이 경과해요.
    3. Amazon ECS가 소스 서비스 개정의 태스크를 정리해요.
    4. Amazon ECS가 배포를 완료해요.
  • DEFERRED 사용 시 배포는 다음 순서로 진행돼요:
    1. 정상 비율만큼의 태스크가 대상 서비스 개정에서 실행되고 정상이 돼요.
    2. 알람 기반 롤백을 사용한다면 베이크 시간이 경과해요.
    3. Amazon ECS가 배포를 완료해요.
    4. Amazon ECS가 배포 외부에서 소스 서비스 개정의 태스크를 정리해요.
  • DEFERRED를 사용하면 Amazon ECS는 최대 2주 동안 소스 서비스 개정의 태스크를 정리하려고 시도해요.
  • 소스 서비스 개정의 태스크가 배포를 계속 붙잡지 않고 계속 실행되어야 할 수 있는, 장기 연결이나 태스크 scale-in 보호가 있는 서비스에는 DEFERRED를 사용하세요. 소스 서비스 개정 드레이닝이 long-tail 작업이고 CI/CD 도구에 시간 제한이 있을 때 유용해요. Amazon ECS는 정상 비율이 충족되면 배포를 완료하고, 소스 서비스 개정의 태스크는 배포 외부에서 드레이닝돼요.

Amazon ECS가 조기 성공 기준을 평가하는 방법

Amazon ECS는 다음이 모두 참이 된 후에 조기 성공 기준을 사용하는 배포를 완료해요.

  • 대상 서비스 개정에서 실행되고 정상인 태스크 수가 desired count의 정상 비율(올림) 이상이에요.
  • 배포 회로 차단기나 CloudWatch 알람이 롤백을 트리거하지 않아요.
  • 알람 기반 롤백을 사용한다면 베이크 시간이 경과해요.
  • 소스 서비스 개정 정리가 BLOCKING이라면 소스 서비스 개정의 태스크가 정리돼요.

Amazon ECS는 대상 서비스 개정에 태스크를 하나 이상 실행하고 정상이 될 때까지 기다린 후 정상 비율을 평가해요.

정상 태스크 수 예시

Desired count 정상 비율 필요한 정상 태스크 (올림)
2 50 1
3 50 2
10 80 8
100 90 90
10 100 10

조기 성공 기준 구성 (Configure early success criteria)

콘솔 또는 AWS CLI를 사용해 새 서비스나 기존 서비스에 조기 성공 기준을 구성할 수 있어요.

콘솔: 서비스 생성 또는 업데이트 흐름에서 Deployment configuration 아래에서 early success criteria를 켭니다. Healthy percent 값을 입력하고 Source service revision cleanup 옵션(Blocking 또는 Deferred)을 선택합니다.

AWS CLI: 서비스를 만들거나 업데이트할 때 --deployment-configuration 파라미터에서 earlySuccessCriteria 값을 설정합니다.

aws ecs update-service \
    --cluster MyCluster \
    --service MyService \
    --deployment-configuration '{
        "strategy": "ROLLING",
        "earlySuccessCriteria": {
            "enable": true,
            "healthyPercent": 90,
            "sourceServiceRevisionCleanup": "BLOCKING"
        }
    }'

관찰되는 것 (What you observe)

DescribeServiceDeployments는 배포 상태와 구성된 조기 성공 기준을 반환해요. 배포가 진행되는 동안 태스크 수는 실시간이에요. 배포가 완료된 후 태스크 수는 배포가 완료된 시점의 스냅샷이에요. 이는 BLOCKING과 DEFERRED 모두에 적용돼요.

  • 서비스의 실시간 태스크 수를 보려면 DescribeServices를 사용하세요.
  • SUCCESSFUL 상태로 ListServiceDeployments를 필터링하면 조기에 완료된 배포가 포함돼요.
  • 배포 상태 변경 이벤트와 AWS CloudTrail 레코드는 표준 IN_PROGRESS에서 SUCCESSFUL로의 수명 주기를 보여 줘요. 조기 성공 기준은 새 배포 상태를 추가하지 않아요.

고려 사항 (Considerations)

조기 성공 기준을 사용하기 전에 다음 사항을 검토하세요.

롤백 모니터링은 배포 중에 적용돼요: 배포 회로 차단기와 CloudWatch 알람 롤백은 배포의 장애 감지 메커니즘이에요. 배포가 진행되는 동안 이를 롤백할 수 있어요. Amazon ECS가 배포를 완료한 후에는, 일반 서비스 스케일링으로 나머지 태스크를 실행하는 동안에도 이 메커니즘들은 더 이상 서비스를 롤백하지 않아요. 배포가 완료된 후에는 배포를 중지할 수 없어요. 정상 비율을 대상 서비스 개정이 정상이라고 확신하는 백분율로 설정하세요.

DEFERRED 정리: DEFERRED를 사용하면 Amazon ECS는 배포를 완료한 후 소스 서비스 개정의 태스크를 정리해요. 배포 후 2주 이상 동안 태스크 scale-in 보호나 다른 메커니즘으로 소스 서비스 개정의 태스크가 보호된다면 Amazon ECS는 이를 정리할 수 없어요. DescribeServices를 사용해 소스 서비스 개정의 태스크를 모니터링하세요.