

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 컨트롤 플레인-제어식 대피
<a name="control-plane-controlled-evacuation"></a>

 첫 번째 패턴은 데이터 영역 작업을 사용하여 영향을 받는 가용 영역에서 작업이 수행되지 않도록 방지함으로써 이벤트의 영향을 완화합니다. 하지만 로드 밸런서 미사용 혹은 호스트 개인별 상태 확인을 구성할 수 없는 아키텍처를 사용하고 있을 수 있습니다. 또는 Auto Scaling 혹은 일반적인 작업 스케줄링을 통해 영향을 받는 가용 영역에 새 용량이 배포되는 것을 방지할 수 있습니다.

 두 상황을 모두 해결하려면 리소스 구성을 업데이트하기 위한 컨트롤 플레인 조치가 필요합니다. 이 패턴은 네트워크 구성을 업데이트할 수 있는 모든 서비스(예: EC2 Auto Scaling, Amazon ECS, Lambda 등)에서 사용할 수 있습니다. 각 서비스에 대한 코드를 작성해야 하지만 비즈니스 로직은 표준 패턴을 따릅니다. 필요한 종속성을 최소화하려면 이벤트에 응답하는 운영자가 로컬에서 코드를 실행해야 합니다. 스크립트 로직의 기본 흐름은 다음 그림과 같습니다.

![가용 영역 제거를 위한 컨트롤 플레인 업데이트를 보여주는 다이어그램](http://docs.aws.amazon.com/ko_kr/whitepapers/latest/advanced-multi-az-resilience-patterns/images/control-plane-evacuation.png)


1.  스크립트는 오토 스케일링, ECS 서비스 또는 Lambda 함수와 같은 지정된 유형의 모든 리소스를 나열하고 리소스 정보에서 해당 서브넷을 검색합니다. 지원되는 리소스는 스크립트가 지원하도록 구성된 항목에 따라 달라집니다.

1.  각 서브넷의 가용 영역 이름을 입력 파라미터로 제공된 매핑된 가용 영역 ID와 비교하여 제거해야 할 서브넷을 결정합니다.

1.  리소스의 네트워크 구성이 업데이트되어 식별된 서브넷이 제거됩니다.

1.  업데이트의 세부 정보는 DynamoDB 테이블에 기록됩니다. 가용 영역 ID는 [파티션 키](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)로 저장되고 리소스 ARN 또는 이름은 [정렬 키](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)로 저장됩니다. 제거된 서브넷은 문자열 배열로 저장됩니다. 마지막으로, 리소스 유형도 저장되어 [글로벌 보조 인덱스](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.SecondaryIndexes)(GSI)의 해시 키로 사용됩니다.

 4단계는 업데이트 내용을 기록하므로 다음 그림과 같이 이 접근 방식을 사용하면 복구할 준비가 되었을 때 쉽게 되돌릴 수 있습니다.

![가용 영역 제거 시 복구를 위한 컨트롤 플레인 업데이트를 보여주는 다이어그램](http://docs.aws.amazon.com/ko_kr/whitepapers/latest/advanced-multi-az-resilience-patterns/images/control-plane-evacuation-recovery.png)


복구 단계:

1.  GSI를 쿼리하여 지정된 가용 영역(또는 가용 영역이 지정되지 않은 경우 모든 가용 영역)에서 지정된 유형의 각 리소스에 대해 제거된 서브넷을 가져옵니다.

1.  DynamoDB 쿼리에서 찾은 각 리소스를 설명하여 현재 네트워크 구성을 가져오십시오.

1.  현재 네트워크 구성의 서브넷을 DynamoDB 쿼리에서 검색된 서브넷과 결합합니다.

1.  리소스의 네트워크 구성을 새 서브넷 세트로 업데이트하십시오.

1.  업데이트가 성공적으로 완료된 후 DynamoDB 테이블에서 레코드를 제거합니다.

 이 일반화된 패턴은 영향을 받는 가용 영역으로의 라우팅 작업을 방해하고 새 용량이 해당 가용 영역에 배포되는 것을 방지합니다. 다음은 여러 서비스에서 이 작업을 수행하는 방법의 예시입니다.
+  **Lambda** — 함수의 [VPC 구성](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)을 업데이트하여 지정된 가용 영역에서 서브넷을 제거합니다.
+  **오토 스케일링** — [ASG 구성에서 서브넷을 제거](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-add-availability-zone.html#as-remove-az-console)하여 나머지 가용 영역의 해당 용량을 대체합니다.
+  **Amazon ECS** — [ECS 서비스 VPC 구성을 업데이트](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html)하여 서브넷을 제거합니다.
+  **Amazon EKS** — 영향을 받는 가용 영역의 노드에 [테인트](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)를 적용하여 기존 포드를 제거하고 추가 포드가 예약되지 않도록 합니다.

 각 서비스는 구성 업데이트에 다르게 반응합니다. 예를 들어, Amazon ECS는 [업데이트 후 서비스의 배포 구성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html)을 따라 새 작업의 롤링 배포 또는 블루/그린 배포를 트리거합니다.

 이러한 업데이트로 인해 일부 워크로드의 경우 정상 가용 영역으로 작업이 너무 빨리 전환될 수 있습니다. 장애 발생 시 정적으로 안정적이도록 구성되어 있지만(영향을 받는 가용 영역의 작업을 처리할 수 있을 만큼 나머지 가용 영역에 충분한 용량이 미리 프로비저닝되어 있음), 영향을 받는 가용 영역의 용량을 단계적으로 줄이는 것도 좋습니다.

**영역 간 로드 밸런싱이 **비활성화된** 로드 밸런서 대상 그룹인 오토 스케일링의 네트워크 구성을 업데이트하려는 경우 이 지침을 따르세요.**  
Auto Scaling은 [가용 영역 재조정 로직](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html)을 사용하여 이러한 변화에 대응합니다. 원하는 용량을 채울 수 있도록 다른 가용 영역의 인스턴스를 시작하고 제거한 가용 영역의 인스턴스를 종료합니다. 하지만 로드 밸런서 내에서는 인스턴스가 종료되는 동안에도 ASG에서 제거한 가용 영역을 포함하여 각 가용 영역에 걸쳐 트래픽을 균등하게 분배합니다. 이로 인해 모든 인스턴스가 성공적으로 종료될 때까지 해당 가용 영역의 남은 용량이 부족해질 수 있습니다. 이는 영역 간 부하 분산이 비활성화된 경우의 가용 영역 불균형과 관련된 *가용 영역 독립성*에 설명된 것과 동일한 문제입니다. 이러한 문제가 발생하지 않도록 하려면 다음 중 하나를 수행하십시오.  
트래픽이 나머지 가용 영역 사이에서만 분리되도록 항상 가용 영역 대피를 먼저 수행하십시오.
해당 가용 영역에 필요한 최소 대상 수와 일치하도록 [DNS 장애 조치와 함께 최소 정상 대상 수](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health.html)를 지정하십시오.
이렇게 하면 인스턴스가 종료되기 시작한 후 제거한 가용 영역으로 트래픽이 전송되지 않도록 할 수 있습니다.