View a markdown version of this page

Amazon ECS 배포 회로 차단기가 장애를 감지하는 방법 - Amazon Elastic Container Service

Amazon ECS 배포 회로 차단기가 장애를 감지하는 방법

배포 회로 차단기는 작업이 안정 상태에 도달하는지 확인하는 롤링 업데이트 메커니즘입니다. 배포 회로 차단기에는 실패한 배포를 COMPLETED 상태의 배포로 자동 롤백하는 옵션이 있습니다. 회로 차단기가 실패를 계산하는 방법과 회로 차단기가 트리거되는 임계값을 사용자 지정하여 롤백 동작을 애플리케이션의 시작 특성 및 작업 실패에 대한 허용 오차와 일치하도록 할 수 있습니다.

서비스 배포의 상태가 변경되면 Amazon ECS는 서비스 배포 상태 변경 이벤트를 EventBridge로 전송합니다. 이를 통해 서비스 배포 상태를 프로그래밍 방식으로 모니터링할 수 있습니다. 자세한 내용은 Amazon ECS 서비스 배포 상태 변경 이벤트 섹션을 참조하세요. 수동 조치를 통해 배포를 시작할 수 있도록 eventNameSERVICE_DEPLOYMENT_FAILED인 EventBridge 규칙을 생성하고 모니터링하는 것이 좋습니다. 자세한 내용은 Amazon EventBridge 사용 설명서EventBridge 시작하기를 참조하세요.

배포 회로 차단기는 배포가 실패한 것으로 확인하면 COMPLETED 상태의 최신 배포를 찾습니다. 그리고 이 배포를 롤백 배포로 사용합니다. 롤백이 시작되면 배포가 COMPLETED에서 IN_PROGRESS로 변경됩니다. 즉, 배포가 COMPLETED 상태에 도달하기까지 다른 롤백을 사용할 수 없습니다. 배포 회로 차단기가 COMPLETED 상태의 배포를 찾지 못하면 회로 차단기는 새 작업을 시작하지 않으며 배포가 중단됩니다.

서비스를 생성하면 스케줄러는 시작하지 못한 작업을 2단계로 추적합니다.

  • 1단계 - 스케줄러는 작업을 모니터링하여 작업이 실행 중 상태로 전환되는지 확인합니다.

    • 성공 - 실행 중 상태로 전환된 작업이 두 개 이상 있기 때문에 배포가 완료됨 상태로 전환될 가능성이 있습니다. 실패 기준을 건너뛰고 회로 차단기는 2단계로 진행합니다.

    • 실패 - 기본적으로 실행 중 상태로 전환되지 않는 연속 작업은 실패 임계값(resetOnHealthyTasktrue)에 포함됩니다. resetOnHealthyTaskfalse일 때 정상 작업이 실패 사이에 시작되는지 여부에 관계없이 모든 작업 실패가 누적됩니다.

  • 2단계 - 실행 중 상태인 작업이 하나 이상 있을 때 배포가 이 단계로 설정됩니다. 회로 차단기는 평가 중인 현재 배포의 작업에 대해 상태 확인을 확인합니다. 검증된 상태 확인은 Elastic Load Balancing, AWS Cloud Map 서비스 상태 확인, 컨테이너 상태 확인입니다.

    • 성공 - 실행 중인 작업 중 상태 확인에 통과된 작업이 하나 이상 있습니다.

    • 실패 - 상태 확인 실패로 인해 교체된 작업이 실패 임계값에 도달했습니다.

서비스에 배포 회로 차단기를 사용할 때 다음 사항을 고려해야 합니다. EventBridge에서 규칙을 생성합니다.

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

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

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

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

  • Amazon ECS 콘솔 또는 AWS CLI(CloudWatch 옵션과 함께 배포 회로 차단기를 사용할 때)를 사용해야 합니다. 자세한 내용은 AWS Command Line Interface 참조에서 정의된 파라미터를 사용하여 서비스 생성create-service를 참조하세요.

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

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

다음 create-service AWS CLI 예제에서는 고정 장애 횟수 5 및 누적 장애 추적을 사용하는 사용자 지정 배포 회로 차단기 구성으로 서비스를 생성하는 방법을 보여줍니다.

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

예제:

배포 1은 COMPLETED 상태입니다.

배포 2를 시작할 수 없으므로 회로 차단기는 배포 1로 롤백합니다. 배포 1이 IN_PROGRESS 상태로 전환됩니다.

배포 3이 시작되고 COMPLETED 상태의 배포가 없으므로 배포 3은 롤백하거나 작업을 시작할 수 없습니다.

실패 임계값

배포 회로 차단기는 실패 임계값을 사용하여 배포를 FAILED 상태로 이동할 시기를 결정합니다. 실패 수 계산 방법과 임계값 자체를 모두 구성할 수 있습니다.

실패 수 계산 모드

resetOnHealthyTask 설정은 회로 차단기가 배포 중 작업 실패를 계산하는 방법을 제어합니다.

true(기본값)

작업이 정상 상태에 도달할 때마다 실패 수가 0으로 재설정됩니다. 연속 실패만 임계값에 포함됩니다. 이 모드는 안정화 전에 간헐적인 시작 실패가 발생할 수 있는 애플리케이션에 유용합니다.

false

작업 실패는 배포 전반에 걸쳐 누적됩니다. 장애 사이에 정상 작업이 시작되더라도 장애 수는 재설정되지 않습니다. 이 모드는 어떤 패턴의 실패이든 문제가 있는 배포를 나타낼 때 더 빠르게 감지합니다.

임계값 구성

thresholdConfiguration 설정은 회로 차단기가 트리거되는 시기를 정의합니다. 여기에는 임계값 계산 방법을 결정하는 type과 사용할 백분율 또는 수를 지정하는 value가 포함됩니다.

BOUNDED_PERCENT(기본값)

Amazon ECS는 원하는 최신 서비스 수 value를 곱하여 실패 임계값을 계산합니다. 결과는 최소 3개, 최대 200개로 고정됩니다. 기본값이 50인 기본 유형입니다.

UNBOUNDED_PERCENT

Amazon ECS는 원하는 최신 서비스 수 value를 곱하여 실패 임계값을 계산합니다. 결과에는 최소치 또는 최대치가 없습니다. 200개의 제한이 없는 비례 임계값이 필요하고 원하는 수가 많은 서비스에 이 유형을 사용합니다.

COUNT

Amazon ECS는 value을 실패 임계값으로 직접 사용합니다. 임계값은 원하는 서비스 수에 관계없이 고정된 상태로 유지됩니다. 예를 들어 개발 환경에서 더 빠른 롤백을 위해 더 낮은 임계값이 필요한 것처럼 허용되는 실패 수가 정확해야 하는 경우 이 유형을 사용합니다.

백분율 유형(BOUNDED_PERCENTUNBOUNDED_PERCENT)의 경우, value의 유효한 범위는 1~100입니다. 배포 중에 Amazon ECS는 원하는 최신 서비스 수를 계산에 지속적으로 사용합니다.

BOUNDED_PERCENT이 임계값을 계산하는 방법

기본 BOUNDED_PERCENT 임계값 유형을 사용하는 경우 배포 회로 차단기는 다음 공식을 사용하여 임계값을 계산합니다.

Minimum threshold (3) <= (value/100) * desired task count => Maximum threshold (200)

계산 결과가 3보다 작으면 임계값은 3으로 설정됩니다. 결과가 200보다 크면 임계값이 200으로 설정됩니다. 그렇지 않으면 임계값이 계산된 값(반올림)으로 설정됩니다.

다음 표에는 기본값 50을 사용하는 예제가 나와 있습니다.

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

1

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

25

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

400

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

800

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

UNBOUNDED_PERCENT에서는 동일한 계산이 적용되지만 최소 및 최대 범위는 적용되지 않습니다. 예를 들어 원하는 개수가 800이고 값이 50인 서비스의 임계값은 400입니다.

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

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

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

    • Elastic Load Balancing 로드 밸런서

    • AWS Cloud Map 서비스

    • Amazon ECS 컨테이너 상태 확인

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

예를 들어, 임계값이 3인 경우 회로 차단기는 실패 횟수가 0으로 설정된 상태에서 시작됩니다. 작업이 RUNNING 상태에 도달하지 못하면 배포 회로 차단기가 실패 횟수를 하나씩 늘립니다. 실패 횟수가 3과 같아지면 배포가 FAILED로 표시됩니다.

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