Amazon ECS 배포 회로 차단기가 장애를 감지하는 방법
배포 회로 차단기는 작업이 안정 상태에 도달하는지 확인하는 롤링 업데이트 메커니즘입니다. 배포 회로 차단기에는 실패한 배포를 COMPLETED 상태의 배포로 자동 롤백하는 옵션이 있습니다. 회로 차단기가 실패를 계산하는 방법과 회로 차단기가 트리거되는 임계값을 사용자 지정하여 롤백 동작을 애플리케이션의 시작 특성 및 작업 실패에 대한 허용 오차와 일치하도록 할 수 있습니다.
서비스 배포의 상태가 변경되면 Amazon ECS는 서비스 배포 상태 변경 이벤트를 EventBridge로 전송합니다. 이를 통해 서비스 배포 상태를 프로그래밍 방식으로 모니터링할 수 있습니다. 자세한 내용은 Amazon ECS 서비스 배포 상태 변경 이벤트 섹션을 참조하세요. 수동 조치를 통해 배포를 시작할 수 있도록 eventName이 SERVICE_DEPLOYMENT_FAILED인 EventBridge 규칙을 생성하고 모니터링하는 것이 좋습니다. 자세한 내용은 Amazon EventBridge 사용 설명서의 EventBridge 시작하기를 참조하세요.
배포 회로 차단기는 배포가 실패한 것으로 확인하면 COMPLETED 상태의 최신 배포를 찾습니다. 그리고 이 배포를 롤백 배포로 사용합니다. 롤백이 시작되면 배포가 COMPLETED에서 IN_PROGRESS로 변경됩니다. 즉, 배포가 COMPLETED 상태에 도달하기까지 다른 롤백을 사용할 수 없습니다. 배포 회로 차단기가 COMPLETED 상태의 배포를 찾지 못하면 회로 차단기는 새 작업을 시작하지 않으며 배포가 중단됩니다.
서비스를 생성하면 스케줄러는 시작하지 못한 작업을 2단계로 추적합니다.
-
1단계 - 스케줄러는 작업을 모니터링하여 작업이 실행 중 상태로 전환되는지 확인합니다.
-
성공 - 실행 중 상태로 전환된 작업이 두 개 이상 있기 때문에 배포가 완료됨 상태로 전환될 가능성이 있습니다. 실패 기준을 건너뛰고 회로 차단기는 2단계로 진행합니다.
-
실패 - 기본적으로 실행 중 상태로 전환되지 않는 연속 작업은 실패 임계값(
resetOnHealthyTask은true)에 포함됩니다.resetOnHealthyTask이false일 때 정상 작업이 실패 사이에 시작되는지 여부에 관계없이 모든 작업 실패가 누적됩니다.
-
-
2단계 - 실행 중 상태인 작업이 하나 이상 있을 때 배포가 이 단계로 설정됩니다. 회로 차단기는 평가 중인 현재 배포의 작업에 대해 상태 확인을 확인합니다. 검증된 상태 확인은 Elastic Load Balancing, AWS Cloud Map 서비스 상태 확인, 컨테이너 상태 확인입니다.
-
성공 - 실행 중인 작업 중 상태 확인에 통과된 작업이 하나 이상 있습니다.
-
실패 - 상태 확인 실패로 인해 교체된 작업이 실패 임계값에 도달했습니다.
-
서비스에 배포 회로 차단기를 사용할 때 다음 사항을 고려해야 합니다. EventBridge에서 규칙을 생성합니다.
-
DescribeServices응답은 배포 상태인rolloutState및rolloutStateReason에 대한 인사이트를 제공합니다. 새 배포가 시작되면 롤아웃 상태는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-nameMyService\ --deployment-controller type=ECS\ --desired-count3\ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definitionsample-fargate:1\ --launch-typeFARGATE\ --platform-familyLINUX\ --platform-version1.4.0\ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"
다음 create-service AWS CLI 예제에서는 고정 장애 횟수 5 및 누적 장애 추적을 사용하는 사용자 지정 배포 회로 차단기 구성으로 서비스를 생성하는 방법을 보여줍니다.
aws ecs create-service \ --service-nameMyService\ --deployment-controller type=ECS\ --desired-count10\ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true,resetOnHealthyTask=false,thresholdConfiguration={type=COUNT,value=5}}" \ --task-definitionsample-fargate:1\ --launch-typeFARGATE\ --platform-familyLINUX\ --platform-version1.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_PERCENT 및 UNBOUNDED_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(계산된 값이 최솟값보다 작음) |
|
25 |
|
13(값이 반올림됨) |
|
400 |
|
200(계산된 값이 최댓값보다 큼) |
|
800 |
|
200(계산된 값이 최댓값보다 큼) |
UNBOUNDED_PERCENT에서는 동일한 계산이 적용되지만 최소 및 최대 범위는 적용되지 않습니다. 예를 들어 원하는 개수가 800이고 값이 50인 서비스의 임계값은 400입니다.
배포 상태 검사에는 두 단계가 있습니다.
-
배포 회로 차단기는 배포의 일부인 태스크를 모니터링하고
RUNNING상태의 태스크를 확인합니다. 스케줄러는 현재 배포된 태스크가RUNNING상태일 때 실패 기준을 무시하고 다음 단계로 진행합니다. 작업이RUNNING상태에 도달하지 못하면 배포 회로 차단기가 실패 횟수를 하나씩 늘립니다. 실패 횟수가 임계값과 같으면 배포가FAILED로 표시됩니다. -
RUNNING상태의 작업이 하나 이상 있을 때 이 단계가 시작됩니다. 배포 회로 차단기는 현재 배포의 태스크에 대해 다음 리소스를 대상으로 상태 확인을 수행합니다.-
Elastic Load Balancing 로드 밸런서
-
AWS Cloud Map 서비스
-
Amazon ECS 컨테이너 상태 확인
태스크에 대한 상태 확인이 실패하면 배포 회로 차단기가 실패 횟수를 하나씩 늘립니다. 실패 횟수가 임계값과 같으면 배포가
FAILED로 표시됩니다. -
예를 들어, 임계값이 3인 경우 회로 차단기는 실패 횟수가 0으로 설정된 상태에서 시작됩니다. 작업이 RUNNING 상태에 도달하지 못하면 배포 회로 차단기가 실패 횟수를 하나씩 늘립니다. 실패 횟수가 3과 같아지면 배포가 FAILED로 표시됩니다.
롤백 옵션을 사용하는 방법에 대한 추가 예제는 Amazon ECS 배포 회로 차단기 발표