롤링 업데이트 - Amazon Elastic Container Service

롤링 업데이트

롤링 업데이트(ECS) 배포 유형을 서비스에 사용하는 경우, 새 서비스 배포가 시작되면 Amazon ECS 서비스 스케줄러가 현재 실행 중인 태스크를 새 작업으로 대체합니다. 롤링 업데이트 중에 서비스에서 추가되거나 제거되는 Amazon ECS 작업의 수는 배포 구성에 의해 제어됩니다. 배포 구성은 minimumHealthyPercentmaximumPercent 값으로 구성되며, 이 값은 서비스가 생성될 때 정의되지만 기존 서비스에서도 업데이트될 수 있습니다.

minimumHealthyPercent는 배포 중 또는 컨테이너 인스턴스가 드레이닝 시 서비스에 대해 실행되어야 하는 작업 수에 대한 하한을 서비스에 대해 원하는 작업 수의 백분율로 나타냅니다. 이 값은 반올림됩니다. 예를 들어, 최소 정상 상태 백분율이 50이고 원하는 작업 수가 4인 경우 스케줄러는 두 개의 새 태스크를 시작하기 전에 두 개의 기존 태스크를 중지할 수 있습니다. 마찬가지로 최소 정상 상태 백분율이 75%이고 원하는 작업 수가 2이면 결과 값이 2이기 때문에 스케줄러는 태스크를 중지 할 수 없습니다.

maximumPercent는 배포 중 또는 컨테이너 인스턴스가 드레이닝 시 서비스에 대해 실행되어야 하는 작업 수에 대한 상한을 서비스에 대해 원하는 작업 수의 백분율로 나타냅니다. 이 값은 내림됩니다. 예를 들어, 최대 백분율이 200이고 원하는 태스크 수가 4개인 경우 스케줄러는 4개의 기존 태스크를 중지하기 전에 4개의 새 태스크를 시작할 수 있습니다. 마찬가지로 최대 백분율이 125이고 원하는 작업 수가 3이면 결과 값이 3이기 때문에 스케줄러는 태스크를 시작할 수 없습니다.

중요

최소 정상 상태 백분율 또는 최대 백분율을 설정할 때는 배포가 트리거될 때 스케줄러가 하나 이상의 태스크를 중지하거나 시작할 수 있는지 확인해야 합니다. 서비스에 잘못된 배포 구성으로 인해 중단된 배포가 있는 경우 서비스 이벤트 메시지가 전송됩니다. 자세한 정보는 서비스 배포 구성으로 인해 배포 중에 서비스(service-name)에서 태스크를 중지하거나 시작할 수 없습니다. minimumHealthyPercent 또는 maximumPercent 값을 업데이트하고 다시 시도하세요. 섹션을 참조하세요.

새 서비스 배포가 시작되거나 배포가 완료되면 Amazon ECS는 서비스 배포 상태 변경 이벤트를 EventBridge로 전송합니다. 이를 통해 서비스 배포 상태를 프로그래밍 방식으로 모니터링할 수 있습니다. 자세한 정보는 서비스 배포 상태 변경 이벤트 섹션을 참조하세요.

롤링 업데이트 배포 유형을 사용하는 새로운 Amazon ECS 서비스를 만들려면 클래식 콘솔에서 Amazon ECS 서비스 생성 섹션을 참조하세요.

배포 회로 차단기 사용

기본적으로 롤링 업데이트 배포 유형을 사용하는 서비스가 새 배포를 시작하면 서비스 스케줄러는 원하는 개수에 도달할 때까지 새 태스크를 시작합니다. 필요에 따라 서비스에서 배포 회로 차단기 로직을 사용할 수 있습니다. 이 경우 배포가 정상 상태에 도달할 수 없는 경우 실패한 상태로 전환됩니다. 또한 배포 회로 차단기 논리는 Amazon ECS가 배포 실패 시 마지막으로 완료된 배포로 롤백하도록 알릴 수 있습니다.

다음 create-service AWS CLI 예에서는 배포 회로 차단기가 롤백을 사용하는 경우 Linux 서비스를 생성하는 방법을 보여줍니다.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 2 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-os LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

서비스에서 배포 회로 차단기 논리를 활성화할 때 다음 사항을 고려해야 합니다.

  • 서비스 배포에 성공적으로 실행 중인 작업이 하나 이상 있는 경우 이전 또는 향후 실패한 작업이 있는 배포와 관계없이 회로 차단기 논리가 시작되지 않습니다.

  • DescribeServices 응답은 배포 상태인 rolloutStaterolloutStateReason에 대한 인사이트를 제공합니다. 새 배포가 시작되면 롤아웃 상태는 IN_PROGRESS 상태에서 시작됩니다. 서비스가 정상 상태에 도달하면 롤아웃 상태가 COMPLETED로 전환됩니다. 서비스가 정상 상태에 도달하지 못하고 회로 차단기가 활성화되면 배포가 FAILED 상태로 전환됩니다. FAILED 상태의 배포는 새로운 태스크를 시작하지 않습니다.

  • Amazon ECS는 시작되고 완료된 배포에 대해 서비스 배포 상태 변경 이벤트를 전송하는 것 외에도 회로 차단기가 활성화된 배포가 실패할 경우 이벤트를 전송합니다. 이러한 이벤트는 배포가 실패한 이유 또는 롤백으로 인해 배포가 시작된 경우에 대한 세부 정보를 제공합니다. 자세한 정보는 서비스 배포 상태 변경 이벤트을 참조하세요.

  • 이전 배포가 실패하고 롤백이 시작되었기 때문에 새 배포가 시작된 경우 서비스 배포의 reason 필드에 롤백으로 인해 배포가 시작되었음이 표시됩니다.

  • 배포 회로 차단기는 롤링 업데이트(ECS) 배포 컨트롤러를 사용하며 Classic Load Balancer를 사용하지 않는 Amazon ECS 서비스에만 지원됩니다.

실패 임계값

배포 회로 차단기는 임계값을 계산한 다음 이 값을 사용하여 배포를 FAILED 상태로 이동할 시기를 결정합니다.

배포 회로 차단기의 최소 임계값은 10이고 최대 임계값은 200이며 다음 공식의 값을 사용하여 배포 실패를 확인합니다.

Minimum threshold <= 0.5 * desired task count => maximum threshold

계산 결과가 최솟값 10보다 작으면 실패 임계값은 10으로 설정됩니다. 계산 결과가 최댓값인 200보다 크면 실패 임계값이 200으로 설정됩니다.

참고

임계값은 변경할 수 없습니다.

배포 상태 검사에는 두 단계가 있습니다.

  1. 배포 회로 차단기는 배포의 일부인 태스크를 모니터링하고 RUNNING 상태의 태스크를 확인합니다. 스케줄러는 현재 배포된 태스크가 RUNNING 상태일 때 실패 기준을 무시하고 다음 단계로 진행합니다. 태스크가 RUNNING 상태에 도달하지 못하면 배포 회로 차단기가 실패 횟수를 하나씩 늘립니다. 실패 횟수가 임계값과 같으면 배포가 FAILED로 표시됩니다.

  2. RUNNING 상태의 태스크가 하나 이상 있을 때 이 단계가 시작됩니다. 배포 회로 차단기는 현재 배포의 태스크에 대해 다음 리소스를 대상으로 상태 확인을 수행합니다.

    • Elastic Load Balancing 로드 밸런서

    • AWS Cloud Map 서비스

    • Amazon ECS 컨테이너 상태 확인

    태스크에 대한 상태 확인이 실패하면 배포 회로 차단기가 실패 횟수를 하나씩 늘립니다. 실패 횟수가 임계값과 같으면 배포가 FAILED로 표시됩니다.

다음 표에 몇 가지 예가 나와 있습니다.

원하는 작업 개수 계산 임계값

1

10 <= 0.5 * 1 => 200
10(계산된 값이 최솟값보다 작음)

25

10 <= 0.5 * 25 => 200
13(값이 반올림됨)

400

10 <= 0.5 * 400 => 200
200

800

10 <= 0.5 * 800 => 200
200(계산된 값이 최댓값보다 큼)

롤백 옵션 사용에 대한 추가 예제는 Amazon ECS 배포 회로 차단기 발표를 참조하세요.