Amazon ECS 카나리 배포
카나리 배포는 먼저 초기 테스트를 위해 소량의 트래픽을 새 개정으로 라우팅한 다음 카나리 단계가 성공적으로 완료된 후 나머지 모든 트래픽을 한 번에 이전합니다. Amazon ECS 카나리 배포를 사용하면 위험 노출을 최소화하면서 실제 사용자 트래픽으로 새 서비스 개정을 검증할 수 있습니다. 이 접근 방식은 성능을 모니터링하고 문제가 감지되면 신속하게 롤백할 수 있는 기능과 함께 변경 사항을 배포하는 제어된 방법을 제공합니다.
카나리 배포와 관련된 리소스
다음은 Amazon ECS 카나리 배포와 관련된 리소스입니다.
-
트래픽 이전 - Amazon ECS가 프로덕션 트래픽을 이전하는 데 사용하는 프로세스. Amazon ECS 카나리 배포의 경우 트래픽은 두 단계로 이전됩니다. 먼저 카나리 백분율로 이전한 다음 배포를 완료합니다.
-
카나리 백분율 - 평가 기간에 새 버전으로 라우팅되는 트래픽의 백분율.
-
카나리 베이크 소요 시간 - 전체 배포를 진행하기 전에 카나리 버전을 모니터링하는 기간.
-
배포 베이크 소요 시간 - 모든 프로덕션 트래픽을 새 서비스 개정으로 이전한 후 Amazon ECS가 이전 서비스 개정을 종료하기 전에 대기하는 시간. 프로덕션 트래픽이 이전한 후 블루 및 그린 서비스 개정이 모두 동시에 실행되는 기간입니다.
-
수명 주기 단계 - '프로덕션 트래픽 전환 후'와 같은 배포 작업에 존재하는 일련의 이벤트.
-
수명 주기 후크 - 특정 수명 주기 단계에서 실행되는 Lambda 함수. 배포를 확인하는 함수를 생성할 수 있습니다.
-
대상 그룹 - 요청을 하나 이상의 등록된 대상(예: EC2 인스턴스)으로 라우팅하는 데 사용되는 ELB 리소스. 리스너를 생성할 때 기본 작업에 대한 대상 그룹을 지정합니다. 트래픽은 리스너 규칙에 지정된 대상 그룹으로 전달됩니다.
-
리스너 - 사용자가 구성한 프로토콜 및 포트를 사용하여 연결 요청을 확인하는 ELB 리소스. 리스너에 대해 사용자가 정의한 규칙에 따라 Amazon ECS가 등록된 대상으로 요청을 라우팅하는 방법이 결정됩니다.
-
규칙 - 리스너와 연결된 ELB 리소스. 규칙은 요청이 라우팅되는 방식을 정의하며, 작업, 조건, 우선순위로 구성됩니다.
고려 사항
배포 유형을 선택할 때 다음을 고려하세요.
-
리소스 사용량: 카나리 배포는 평가 기간에 원본 태스크 세트와 카나리 태스크 세트를 동시에 실행하여 리소스 사용량을 늘립니다.
-
트래픽 볼륨: 카나리 백분율이 새 버전의 의미 있는 검증을 위해 충분한 트래픽을 생성하는지 확인합니다.
-
복잡성 모니터링: 카나리 배포에서는 두 버전 간의 지표를 동시에 모니터링하고 비교해야 합니다.
-
롤백 속도: 카나리 배포에서는 트래픽을 원래 태스크 세트로 다시 이전하여 빠른 롤백이 가능합니다.
-
위험 완화: 카나리 배포는 적은 비율의 사용자로 노출을 제한하여 뛰어난 위험 완화 기능을 제공합니다.
-
배포 기간: 카나리 배포에는 전체 배포 시간을 연장하지만 검증 기회를 제공하는 평가 기간이 포함됩니다.
카나리 배포 작동 방식
Amazon ECS 카나리 배포 프로세스는 안전하고 신뢰할 수 있는 애플리케이션 업데이트를 보장하는 6단계로 구성된 구조화된 접근 방식을 따릅니다. 각 단계는 애플리케이션을 검증하고 현재 버전(파란색)에서 새 버전(녹색)으로 전환하는 구체적인 목적을 지원합니다.
-
준비 단계: 기존 블루 환경과 함께 그린 환경을 생성합니다.
-
배포 단계: 그린 환경에 새 서비스 개정을 배포합니다. 블루 환경이 프로덕션 트래픽을 계속 처리하는 동안 Amazon ECS는 업데이트된 서비스 개정을 사용하여 새 태스크를 시작합니다.
-
테스트 단계: 테스트 트래픽 라우팅을 사용하여 그린 환경을 검증합니다. Application Load Balancer는 프로덕션 트래픽이 블루 환경에서 유지되는 동안 테스트 요청을 그린 환경으로 보냅니다.
-
카나리 트래픽 이전 단계: 카나리 단계에서 구성된 트래픽 비율을 새 그린 서비스 개정으로 이전한 다음 트래픽의 100.0%를 그린 서비스 개정으로 이동
-
모니터링 단계: 베이크 소요 시간 동안 애플리케이션 상태, 성능 지표 및 경보 상태를 모니터링합니다. 문제가 감지되면 롤백 작업이 시작됩니다.
-
완료 단계: 블루 환경을 종료하여 배포를 완료합니다.
카나리 트래픽 이전 단계는 다음 단계를 따릅니다.
-
초기 - 배포는 블루(현재) 서비스 개정으로 라우팅된 트래픽의 100%로 시작됩니다. 그린(신규) 서비스 개정은 테스트 트래픽을 수신하지만 처음에는 프로덕션 트래픽은 수신하지 않습니다.
-
카나리 트래픽 이전 - 2단계 트래픽 이전 전략입니다.
-
1단계: 녹색으로 10.0%, 파란색으로 90.0%
-
2단계: 녹색으로 100.0%, 파란색으로 0.0%
-
-
카나리 베이크 소요 시간 - 트래픽 로드가 증가함에 따라 새 개정의 성능을 모니터링하고 검증할 수 있도록 카나리 트래픽 이전 후 구성 가능한 기간(카나리 베이크 소요 시간)을 대기합니다.
-
수명 주기 후크 - 배포 중 다양한 수명 주기 단계에서 선택적 Lambda 함수를 실행하여 자동화된 검증, 모니터링 또는 사용자 지정 로직을 수행할 수 있습니다. PRODUCTION_TRAFFIC_SHIFT에 대해 구성된 Lambda 함수 또는 수명 주기 후크는 모든 프로덕션 트래픽 이전 단계에서 간접 호출됩니다.
배포 수명 주기 단계
카나리 배포 프로세스는 각각 특정 책임과 검증 체크포인트가 있는 고유한 수명 주기 단계로 진행됩니다. 이러한 단계를 이해하면 배포 진행 상황을 모니터링하고 문제를 효과적으로 해결할 수 있습니다.
각 수명 주기 단계는 최대 24시간 동안 지속될 수 있으며 PRODUCTION_TRAFFIC_SHIFT의 각 트래픽 이전 단계도 최대 24시간 동안 지속될 수 있습니다. 값을 24시간 표시 미만으로 유지하는 것이 좋습니다. 비동기 프로세스가 후크를 트리거하는 데 시간이 필요하기 때문입니다. 시스템 제한 시간이 초과되어 배포에 실패하고 하나의 단계가 24시간에 도달한 후에 롤백을 시작합니다.
CloudFormation 배포에는 추가 제한 시간의 제한 사항이 있습니다. 24시간의 단계 제한은 여전히 유효하지만 CloudFormation은 전체 배포에 대해 36시간의 제한을 적용합니다. CloudFormation에서 배포에 실패하고 프로세스가 36시간 이내에 완료되지 않으면 롤백을 시작합니다.
| 수명 주기 단계 | 설명 | 수명 주기 후크 지원 |
|---|---|---|
| RECONCILE_SERVICE | 이 단계는 활성 상태인 서비스 개정이 2개 이상인 새 서비스 배포를 시작하는 경우에만 나타납니다. | 예 |
| PRE_SCALE_UP | 그린 서비스 개정이 시작되지 않았습니다. 블루 서비스 개정이 프로덕션 트래픽의 100%를 처리하는 중입니다. 테스트 트래픽이 없습니다. | 예 |
| SCALE_UP | 그린 서비스 개정이 100%까지 스케일 업되고 새 태스크를 시작하는 시간. 그린 서비스 개정이 현재 트래픽을 처리하지 않습니다. | 아니요 |
| POST_SCALE_UP | 그린 서비스 개정이 시작되었습니다. 블루 서비스 개정이 프로덕션 트래픽의 100%를 처리하는 중입니다. 테스트 트래픽이 없습니다. | 예 |
| TEST_TRAFFIC_SHIFT | 블루 및 그린 서비스 개정이 실행 중입니다. 블루 서비스 개정이 프로덕션 트래픽의 100%를 처리합니다. 그린 서비스 개정이 테스트 트래픽의 0%~100%를 마이그레이션하고 있습니다. | 예 |
| POST_TEST_TRAFFIC_SHIFT | 테스트 트래픽 전환이 완료되었습니다. 그린 서비스 개정이 테스트 트래픽의 100%를 처리합니다. | 예 |
| PRODUCTION_TRAFFIC_SHIFT | 카나리 프로덕션 트래픽은 그린 개정으로 라우팅되고 수명 주기 후크는 24시간 제한 시간으로 간접 호출됩니다. 두 번째 단계에서는 나머지 프로덕션 트래픽을 그린 개정으로 이전합니다. | 예 |
| POST_PRODUCTION_TRAFFIC_SHIFT | 프로덕션 트래픽 전환이 완료되었습니다. | 예 |
| BAKE_TIME | 블루 및 그린 서비스 개정이 동시에 실행 중인 기간. | 아니요 |
| CLEAN_UP | 블루 서비스 개정이 실행 중인 태스크가 0개인 상태로 완전히 스케일 다운되었습니다. 이제 그린 서비스 개정은 이 단계 이후에 프로덕션 서비스 개정이 됩니다. | 아니요 |
구성 파라미터
카나리 배포에는 다음 구성 파라미터가 필요합니다.
-
카나리 백분율 - 카나리 단계에서 새 서비스 개정으로 라우팅할 트래픽의 백분율. 이를 통해 프로덕션 트래픽의 제어된 하위 세트로 테스트할 수 있습니다.
-
카나리 베이크 소요 시간 - 남은 트래픽을 새 서비스 개정으로 이전하기 전에 카나리 단계에서 대기하는 기간. 이 시간에 새 버전을 모니터링하고 검증할 수 있습니다.
트래픽 관리
카나리 배포는 로드 밸런서 대상 그룹을 사용하여 트래픽 분산을 관리합니다.
-
원래 대상 그룹 - 현재 안정적인 버전의 태스크를 포함하며 대부분의 트래픽을 수신합니다.
-
카나리 대상 그룹 - 새 버전의 태스크를 포함하며 테스트를 위해 소량의 트래픽을 수신합니다.
-
가중치 기반 라우팅 - 로드 밸런서는 가중치 기반 라우팅 규칙을 사용하여 구성된 카나리 백분율을 기반으로 대상 그룹 간에 트래픽을 분산합니다.
모니터링 및 검증
효과적인 카나리 배포는 포괄적인 모니터링에 의존합니다.
-
상태 확인 - 두 태스크 세트 모두 트래픽을 수신하기 전에 상태 확인을 통과해야 합니다.
-
지표 비교 - 응답 시간, 오류율 및 처리량과 같은 원래 버전과 카나리 버전 간의 주요 성능 지표를 비교합니다.
-
자동 롤백 - 카나리 버전에서 성능이 저하된 경우 롤백을 자동으로 트리거하도록 CloudWatch 경보를 구성합니다.
-
수동 검증 - 평가 기간을 사용하여 계속하기 전에 로그, 지표 및 사용자 피드백을 수동으로 검토합니다.
카나리 배포 모범 사례
서비스를 사용하여 카나리를 성공적으로 배포하려면 다음 모범 사례를 따릅니다.
적절한 트래픽 백분율 선택
카나리 트래픽 백분율을 선택할 경우 다음 요소를 고려합니다.
-
작게 시작 - 트래픽의 5~10%로 시작하여 문제가 발생할 경우 영향을 최소화합니다.
-
애플리케이션 중요도 고려 - 미션 크리티컬 애플리케이션에는 더 작은 비율을 사용하고 덜 중요한 서비스에는 더 큰 비율을 사용합니다.
-
트래픽 볼륨 고려 - 카나리 백분율이 의미 있는 검증을 위해 충분한 트래픽을 생성하는지 확인합니다.
적절한 평가 기간 설정
다음 고려 사항에 따라 평가 기간을 구성합니다.
-
충분한 시간 허용 - 의미 있는 성능 데이터를 캡처할 수 있을 만큼 충분히 긴 평가 기간을 설정합니다. 일반적으로 10~30분입니다.
-
트래픽 패턴 고려 - 애플리케이션의 트래픽 패턴과 최대 사용 시간을 고려합니다.
-
속도 및 안전의 균형 - 평가 기간이 길수록 더 많은 데이터를 제공하지만 배포 속도는 느립니다.
포괄적인 모니터링 구현
카나리 배포 성능을 추적하도록 모니터링을 설정합니다.
-
주요 지표 - 두 작업 세트의 응답 시간, 오류율, 처리량 및 리소스 사용률을 모니터링합니다.
-
경보 기반 롤백 - 지표가 임계치를 초과할 때 롤백을 자동으로 트리거하도록 CloudWatch 경보를 구성합니다.
-
비교 분석 - 원래 버전과 카나리 버전 간의 지표를 나란히 비교하도록 대시보드를 설정합니다.
-
비즈니스 지표 - 기술 지표와 함께 전환율 또는 사용자 참여와 같은 비즈니스별 지표를 포함합니다.
롤백 전략 계획
다음 전략으로 잠재적 롤백 시나리오를 준비합니다.
-
자동화된 롤백 - 상태 확인 및 성능 지표를 기반으로 자동 롤백 트리거를 구성합니다.
-
수동 롤백 절차 - 자동화된 트리거가 모든 문제를 캡처하지 않는 경우 수동 롤백에 대한 명확한 절차를 문서화합니다.
-
롤백 테스트 - 롤백 절차를 정기적으로 테스트하여 필요할 때 올바르게 작동하는지 확인합니다.
배포 전에 철저히 검증
카나리 배포를 진행하기 전에 철저하게 검증합니다.
-
사전 배포 테스트 - 카나리 배포 전에 스테이징 환경의 변경 사항을 철저히 테스트합니다.
-
상태 확인 구성 - 상태 확인이 애플리케이션 준비 상태 및 기능을 정확하게 반영하는지 확인합니다.
-
종속성 검증 - 새 버전이 다운스트림 및 업스트림 서비스와 호환되는지 확인합니다.
-
데이터 일관성 - 데이터베이스 스키마 변경 및 데이터 마이그레이션이 이전 버전과 호환되는지 확인합니다.
팀 참여 조정
카나리 배포 중에 효과적인 팀 조정을 보장합니다.
-
배포 기간 - 팀이 모니터링하고 대응할 수 있는 업무 시간 중에 카나리 배포를 예약합니다.
-
통신 채널 - 배포 상태 및 문제 에스컬레이션을 위한 명확한 통신 채널을 설정합니다.
-
역할 할당 - 모니터링, 의사 결정 및 롤백 실행에 대한 역할과 책임을 정의합니다.