기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
컨트롤 플레인-제어식 대피
첫 번째 패턴은 데이터 영역 작업을 사용하여 영향을 받는 가용 영역에서 작업이 수행되지 않도록 방지함으로써 이벤트의 영향을 완화합니다. 하지만 로드 밸런서 미사용 혹은 호스트 개인별 상태 확인을 구성할 수 없는 아키텍처를 사용하고 있을 수 있습니다. 또는 Auto Scaling 혹은 일반적인 작업 스케줄링을 통해 영향을 받는 가용 영역에 새 용량이 배포되는 것을 방지할 수 있습니다.
두 상황을 모두 해결하려면 리소스 구성을 업데이트하기 위한 컨트롤 플레인 조치가 필요합니다. 이 패턴은 네트워크 구성을 업데이트할 수 있는 모든 서비스(예: EC2 Auto Scaling, Amazon ECS, Lambda 등)에서 사용할 수 있습니다. 각 서비스에 대한 코드를 작성해야 하지만 비즈니스 로직은 표준 패턴을 따릅니다. 필요한 종속성을 최소화하려면 이벤트에 응답하는 운영자가 로컬에서 코드를 실행해야 합니다. 스크립트 로직의 기본 흐름은 다음 그림과 같습니다.

가용 영역 제거를 위한 컨트롤 플레인 업데이트
-
스크립트는 오토 스케일링, ECS 서비스 또는 Lambda 함수와 같은 지정된 유형의 모든 리소스를 나열하고 리소스 정보에서 해당 서브넷을 검색합니다. 지원되는 리소스는 스크립트가 지원하도록 구성된 항목에 따라 달라집니다.
-
각 서브넷의 가용 영역 이름을 입력 파라미터로 제공된 매핑된 가용 영역 ID와 비교하여 제거해야 할 서브넷을 결정합니다.
-
리소스의 네트워크 구성이 업데이트되어 식별된 서브넷이 제거됩니다.
-
업데이트의 세부 정보는 DynamoDB 테이블에 기록됩니다. 가용 영역 ID는 파티션 키로 저장되고 리소스 ARN 또는 이름은 정렬 키로 저장됩니다. 제거된 서브넷은 문자열 배열로 저장됩니다. 마지막으로, 리소스 유형도 저장되어 글로벌 보조 인덱스(GSI)의 해시 키로 사용됩니다.
4단계는 업데이트 내용을 기록하므로 다음 그림과 같이 이 접근 방식을 사용하면 복구할 준비가 되었을 때 쉽게 되돌릴 수 있습니다.

가용 영역 제거 시 복구를 위한 컨트롤 플레인 업데이트
복구 단계:
-
GSI를 쿼리하여 지정된 가용 영역(또는 가용 영역이 지정되지 않은 경우 모든 가용 영역)에서 지정된 유형의 각 리소스에 대해 제거된 서브넷을 가져옵니다.
-
DynamoDB 쿼리에서 찾은 각 리소스를 설명하여 현재 네트워크 구성을 가져오십시오.
-
현재 네트워크 구성의 서브넷을 DynamoDB 쿼리에서 검색된 서브넷과 결합합니다.
-
리소스의 네트워크 구성을 새 서브넷 세트로 업데이트하십시오.
-
업데이트가 성공적으로 완료된 후 DynamoDB 테이블에서 레코드를 제거합니다.
이 일반화된 패턴은 영향을 받는 가용 영역으로의 라우팅 작업을 방해하고 새 용량이 해당 가용 영역에 배포되는 것을 방지합니다. 다음은 여러 서비스에서 이 작업을 수행하는 방법의 예시입니다.
-
Lambda — 함수의 VPC 구성을 업데이트하여 지정된 가용 영역에서 서브넷을 제거합니다.
-
오토 스케일링 — ASG 구성에서 서브넷을 제거하여 나머지 가용 영역의 해당 용량을 대체합니다.
-
Amazon ECS — ECS 서비스 VPC 구성을 업데이트하여 서브넷을 제거합니다.
-
Amazon EKS — 영향을 받는 가용 영역의 노드에 테인트
를 적용하여 기존 포드를 제거하고 추가 포드가 예약되지 않도록 합니다.
각 서비스는 구성 업데이트에 다르게 반응합니다. 예를 들어, Amazon ECS는 업데이트 후 서비스의 배포 구성을 따라 새 작업의 롤링 배포 또는 블루/그린 배포를 트리거합니다.
이러한 업데이트로 인해 일부 워크로드의 경우 정상 가용 영역으로 작업이 너무 빨리 전환될 수 있습니다. 장애 발생 시 정적으로 안정적이도록 구성되어 있지만(영향을 받는 가용 영역의 작업을 처리할 수 있을 만큼 나머지 가용 영역에 충분한 용량이 미리 프로비저닝되어 있음), 영향을 받는 가용 영역의 용량을 단계적으로 줄이는 것도 좋습니다.
영역 간 로드 밸런싱이 비활성화된 로드 밸런서 대상 그룹인 오토 스케일링의 네트워크 구성을 업데이트하려는 경우 이 지침을 따르세요.
Auto Scaling은 가용 영역 재조정 로직을 사용하여 이러한 변화에 대응합니다. 원하는 용량을 채울 수 있도록 다른 가용 영역의 인스턴스를 시작하고 제거한 가용 영역의 인스턴스를 종료합니다. 하지만 로드 밸런서 내에서는 인스턴스가 종료되는 동안에도 ASG에서 제거한 가용 영역을 포함하여 각 가용 영역에 걸쳐 트래픽을 균등하게 분배합니다. 이로 인해 모든 인스턴스가 성공적으로 종료될 때까지 해당 가용 영역의 남은 용량이 부족해질 수 있습니다. 이는 영역 간 부하 분산이 비활성화된 경우의 가용 영역 불균형과 관련된 가용 영역 독립성에 설명된 것과 동일한 문제입니다. 이러한 문제가 발생하지 않도록 하려면 다음 중 하나를 수행하십시오.
-
트래픽이 나머지 가용 영역 사이에서만 분리되도록 항상 가용 영역 대피를 먼저 수행하십시오.
-
해당 가용 영역에 필요한 최소 대상 수와 일치하도록 DNS 장애 조치와 함께 최소 정상 대상 수를 지정하십시오.
이렇게 하면 인스턴스가 종료되기 시작한 후 제거한 가용 영역으로 트래픽이 전송되지 않도록 할 수 있습니다.