

# Amazon ECS 배포 회로 차단기가 장애를 감지하는 방법
<a name="deployment-circuit-breaker"></a>

배포 회로 차단기는 작업이 안정 상태에 도달하는지 확인하는 롤링 업데이트 메커니즘입니다. 배포 회로 차단기에는 실패한 배포를 `COMPLETED` 상태의 배포로 자동 롤백하는 옵션이 있습니다.

서비스 배포의 상태가 변경되면 Amazon ECS는 서비스 배포 상태 변경 이벤트를 EventBridge로 전송합니다. 이를 통해 서비스 배포 상태를 프로그래밍 방식으로 모니터링할 수 있습니다. 자세한 내용은 [Amazon ECS 서비스 배포 상태 변경 이벤트](ecs_service_deployment_events.md) 섹션을 참조하세요. 수동 조치를 통해 배포를 시작할 수 있도록 `eventName`이 `SERVICE_DEPLOYMENT_FAILED`인 EventBridge 규칙을 생성하고 모니터링하는 것이 좋습니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [EventBridge 시작하기](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)를 참조하세요.

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

서비스를 생성하면 스케줄러는 시작하지 못한 작업을 2단계로 추적합니다.
+ 1단계 - 스케줄러는 작업을 모니터링하여 작업이 실행 중 상태로 전환되는지 확인합니다.
  + 성공 - 실행 중 상태로 전환된 작업이 두 개 이상 있기 때문에 배포가 완료됨 상태로 전환될 가능성이 있습니다. 실패 기준을 건너뛰고 회로 차단기는 2단계로 진행합니다.
  + 실패 - 실행 중 상태로 전환되지 않은 작업이 연속적으로 발생하고 배포가 실패 상태로 전환될 수 있습니다.
+ 2단계 - 실행 중 상태인 작업이 하나 이상 있을 때 배포가 이 단계로 설정됩니다. 회로 차단기는 평가 중인 현재 배포의 작업에 대해 상태 확인을 확인합니다. 검증된 상태 확인은 Elastic Load Balancing, AWS Cloud Map 서비스 상태 확인, 컨테이너 상태 확인입니다.
  + 성공 - 실행 중인 작업 중 상태 확인에 통과된 작업이 하나 이상 있습니다.
  + 실패 - 상태 확인 실패로 인해 교체된 작업이 실패 임계값에 도달했습니다.

서비스에 배포 회로 차단기를 사용할 때 다음 사항을 고려해야 합니다. EventBridge에서 규칙을 생성합니다.
+ `DescribeServices` 응답은 배포 상태인 `rolloutState` 및 `rolloutStateReason`에 대한 인사이트를 제공합니다. 새 배포가 시작되면 롤아웃 상태는 `IN_PROGRESS` 상태에서 시작됩니다. 서비스가 정상 상태에 도달하면 롤아웃 상태가 `COMPLETED`로 전환됩니다. 서비스가 안정 상태에 도달하지 못하고 회로 차단기가 켜지면 배포가 `FAILED` 상태로 전환됩니다. `FAILED` 상태의 배포는 새로운 작업을 시작하지 않습니다.
+ Amazon ECS는 시작되고 완료된 배포에 대해 서비스 배포 상태 변경 이벤트를 전송하는 것 외에도 회로 차단기가 켜진 배포가 실패할 경우 이벤트를 전송합니다. 이러한 이벤트는 배포가 실패한 이유 또는 롤백으로 인해 배포가 시작된 경우에 대한 세부 정보를 제공합니다. 자세한 내용은 [Amazon ECS 서비스 배포 상태 변경 이벤트](ecs_service_deployment_events.md) 섹션을 참조하세요.
+ 이전 배포가 실패하고 롤백이 시작되었기 때문에 새 배포가 시작된 경우 서비스 배포의 `reason` 필드에 롤백으로 인해 배포가 시작되었음이 표시됩니다.
+ 배포 회로 차단기는 롤링 업데이트(`ECS`) 배포 컨트롤러를 사용하는 Amazon ECS 서비스에만 지원됩니다.
+ Amazon ECS 콘솔 또는 AWS CLI(CloudWatch 옵션과 함께 배포 회로 차단기를 사용할 때)를 사용해야 합니다. 자세한 내용은 *AWS Command Line Interface 참조*에서 [정의된 파라미터를 사용하여 서비스 생성](create-service-console-v2.md#create-custom-service) 및 [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html)를 참조하세요.

다음 `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}}}"
```

예제:

배포 1은 `COMPLETED` 상태입니다.

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

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

## 실패 임계값
<a name="failure-threshold"></a>

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

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

```
Minimum threshold <= 0.5 * {{desired task count}} => maximum threshold
```

계산 결과가 최솟값 3보다 크지만 최댓값인 200보다 작으면 실패 임계값은 계산된 임계값(반올림)으로 설정됩니다.

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

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

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

1. `RUNNING` 상태의 작업이 하나 이상 있을 때 이 단계가 시작됩니다. 배포 회로 차단기는 현재 배포의 태스크에 대해 다음 리소스를 대상으로 상태 확인을 수행합니다.
   + Elastic Load Balancing 로드 밸런서
   + AWS Cloud Map 서비스
   + Amazon ECS 컨테이너 상태 확인

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

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


| 원하는 작업 개수 | 계산 | 임계값 | 
| --- | --- | --- | 
| 1 |  <pre>3 <= 0.5 * 1 => 200</pre>  | 3(계산된 값이 최솟값보다 작음) | 
| 25 |  <pre>3 <= 0.5 * 25 => 200</pre>  | 13(값이 반올림됨) | 
| 400 |  <pre>3 <= 0.5 * 400 => 200</pre>  | 200 | 
| 800 |  <pre>3 <= 0.5 * 800 => 200</pre>  | 200(계산된 값이 최댓값보다 큼) | 

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

롤백 옵션을 사용하는 방법에 대한 추가 예제는 [Amazon ECS 배포 회로 차단기 발표](https://aws.amazon.com/blogs/containers/announcing-amazon-ecs-deployment-circuit-breaker/)를 참조하세요.