- 최신
- 최다 투표
- 가장 많은 댓글
안녕하세요,
질문자님께서는 CodeDeploy를 Auto Scaling 그룹과 ALB에 연동해 Blue/Green 배포했을 때,
- 왜 Target Group의 트래픽 라우팅 비율이 유지되는지
- 왜 대체 인스턴스가 두 개의 Target Group에 중복 등록 되는지
에 대해서 질문 주셨습니다. 혹시 제가 잘못 이해했다면 댓글 남겨주시면 감사하겠습니다.
먼저, CodeDeploy의 Blue/Green 배포 과정에 대해 간략하게 설명드리자면,
- 선택하신 원본 Auto Scaling Group을 복제한 “새로운 Auto Scaling Group”을 생성해 대체 (새로운 배포) 인스턴스들을 생성합니다. [1]
- 새로운 Auto Scaling Group이 생성한 대체 인스턴스에 appspec.yml에서 정의한 배포 과정이 실행됩니다.,
- 선택하신 Target Group들에 대체 인스턴스를 추가되게 됩니다.
- 대체 인스턴스로 트래픽을 라우팅한 후, 원본 인스턴스는 Target Group에서 Deregister하게 됩니다.
- 원본 인스턴스 종료를 설정하셨으므로, 원본 인스턴스는 CodeDeploy의 “4단계: "원본 인스턴스 종료 중“이 완료되는 시점 (5분)이 지나면 삭제되게 됩니다.
이 전체 과정에서 ALB, 그리고 ALB 리스너 설정은 변경되지 않으므로, ALB 리스너의 설정인 “Target Group 간의 트래픽 라우팅 비율”은 동일하게 유지됩니다. 또한, 첨부해주신 ALB 리소스 맵 이미지에 나타나는 인스턴스 한 개는 대체 인스턴스로 추정됩니다.
배포 그룹에서 선택하신 Target Group 모두에 대체 인스턴스가 등록된 것은 “로드 밸런서 유형”에 두 개의 Target Group 모두를 선택하셨기 때문인 것으로 보입니다. [2]에 따르면, “각 대체 인스턴스는 선택한 모든 Classic Load Balancer 및 Target Group에 등록됩니다” 라고 나옵니다. 즉, 여기서 선택하는 Target Group은 “대체 인스턴스를 등록할 Target Group”이며, Blue/Green에 대응되는 각 Target Group을 선택하는 것이 아닙니다.
설명해주신 환경과 동일한 환경으로 실제로 재현해본 결과, Auto-Scaling 그룹과 새로운 대체 인스턴스가 새롭게 만들어지고, ALB와 리스너 설정은 동일하게 유지되는 것이 확인됩니다. 이후, 대체 인스턴스가 두 Target Group에 모두 등록되고, 원본 인스턴스의 트래픽을 차단, Deregister 하는 과정이 ALB 콘솔의 리소스 맵에서 정상적으로 확인되며, 5분 후 인스턴스가 삭제되는 것이 EC2 콘솔에서 확인됩니다.
정리하자면, 설명해주신 CodeDeploy의 현상은 기능 상 정상적인 현상이며, CodeDeploy는 배포그룹에 등록하신 Target Group 모두에 인스턴스를 추가하기에 두 Target Group에 대체 인스턴스 하나가 추가되었고, CodeDeploy 배포와 관련이 없는 “Target Group 간 트래픽 라우팅 비율” 설정은 유지된 것으로 추정됩니다.
답변이 도움이 되셨길 바라며, 추가적으로 궁금하신 사항이 있으시면 편하게 댓글 남겨주시면 도와드리겠습니다.
감사합니다.
참고링크: [1] https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups-create-blue-green.html [2] https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/applications-create-blue-green.html
제공해주신 정보를 바탕으로 현재 상황을 분석해보겠습니다.
현재 상황 분석: AWS CodeDeploy의 블루/그린 배포에서는 대상 그룹 이름(blue/green)이 고정되어 있지만, 실제 역할은 배포마다 교대됩니다. 즉, 대상 그룹의 이름과 실제 역할(프로덕션/스테이징)은 별개입니다.
배포 과정에서 일어나는 일:
- 새 배포가 시작되면 CodeDeploy는 현재 프로덕션 환경(트래픽을 받고 있는 환경)을 식별합니다.
- 다른 대상 그룹에 새 인스턴스를 생성합니다.
- 새 인스턴스가 준비되면 트래픽을 새 환경으로 전환합니다.
- 설정한 대기 시간(5분) 후에 이전 환경의 인스턴스를 종료합니다.
현재 상황에서는 service-tg-blue가 항상 100% 트래픽을 받고 있는데, 이는 정상적인 동작입니다. CodeDeploy는 배포 시 내부적으로 트래픽을 전환하지만, 배포가 완료된 후에는 항상 지정된 "프로덕션" 대상 그룹(여기서는 service-tg-blue)으로 트래픽을 라우팅합니다.
두 대상 그룹에 동일한 인스턴스가 등록되어 있는 것은 배포 과정에서 일시적으로 발생할 수 있습니다. 배포가 완료되면 이전 환경의 인스턴스는 종료되어야 합니다.
해결 방안:
- CodeDeploy 콘솔에서 배포 이벤트와 로그를 확인하여 배포 과정이 올바르게 진행되는지 검증하세요.
- 배포 그룹 설정에서 "배포 그룹의 원본 인스턴스 종료" 옵션이 활성화되어 있는지 확인하세요.
- 대상 그룹의 상태를 주기적으로 확인하여 이전 환경의 인스턴스가 적절히 종료되는지 모니터링하세요.
- AWS CloudWatch를 통해 배포 과정의 이벤트와 로그를 모니터링하여 더 자세한 정보를 얻을 수 있습니다.
결론적으로, 현재 설정은 기본적으로 올바르게 구성된 것으로 보이며, service-tg-blue가 항상 프로덕션 트래픽을 받는 것은 정상적인 동작입니다. 블루/그린 배포의 핵심은 트래픽이 중단 없이 새 버전으로 전환되는 것이며, 이 부분이 잘 작동하고 있다면 배포 전략은 성공적으로 구현된 것입니다.
Sources
DescribeLoadBalancers - Elastic Load Balancing
DescribeLoadBalancers - Elastic Load Balancing
