EMD Blog

Blue/Green 배포의 동작방식을 알아보자 본문

Public Cloud/AWS

Blue/Green 배포의 동작방식을 알아보자

EmaDam 2021. 7. 21. 20:44

CodeDeploy와 ELB를 활용해 Blue/Green 배포 중 헷갈리는 부분이 있었다. 기존에 알고있던 Blue/Green 배포 방식은 아래와 같았다.

 

잘못된 지식

부끄러운 일이지만 여태까지는 Blue/Green 배포가 이런 방식으로 진행되는 줄 알았다. 즉, AZ 단위로 하나씩 배포되는 방식인줄 알고 있었던 것이다. 더 부끄러운 것은 위 동작 방식은 동작 방식 그 자체도 Blue/Green 배포 방식이 아니다. 이렇게까지 잘못 이해하고 있었던 이유는 처음부터 배포단위를 착각했었던 이유가 제일 컸다. 그럼 AWS를 사용해 Blue/Green 배포에 대해 자세하게 살펴보자.

만약에 Blue/Green 배포가 무엇인지 모른다면 아래 글을 가볍게 읽고오자.

https://www.redhat.com/ko/topics/devops/what-is-blue-green-deployment

 

Blue-Green 배포란?

Blue Green 배포는 애플리케이션 또는 마이크로서비스의 이전 버전에 있던 사용자 트래픽을 이전 버전과 거의 동일한 새 버전으로 점진적으로 이전하는 애플리케이션 릴리스 모델입니다. 이때 두

www.redhat.com

 

 

여기서 설명하는 환경은 ECS(Fargate) + ELB(NLB) + CodeDeploy다. 서버리스 환경인데 배포방식에는 차이가 없으니 문제는 없을 듯 하다. 그럼 먼저 생성되어 있는 전체 구성을 보도록 하자.

 

전체 구성을 간략하게 축약해보았다.(하나의 클러스터에 하나의 서비스만 만들어 두었다고 가정한다.) 여기서 중요한 것은 ECS에서 서비스 생성 시 배포 방식을 선택할 수 있는데 Blue/Green 배포 시 로드밸런서의 Target Group을 두개 선택해야하는 것이다. 즉, Blue/Green 배포는 Target Group단위로 배포 된다. 

 

위 구성을 보면 8001 Listener에 Target Group 1이 연결되어 있고 Target Group2는 생성은 되어 있으나 사용하지 않는 상태로 유지되고 있는 것을 볼 수 있다. Target Group 2는 오직 Blue/Green 배포 시에만 사용된다. 그럼 이 상태에서 Blue/Green 배포를 해보자.

 

먼저 배포 전 상태를 보자.

로드밸런서 listener(8001:8001)에 todsolution-account-p가 연결되어있다. 

그리고 todsolution 클러스터 내 account 서비스에는 2개의 작업이 실행 중이다. 그럼 배포를 시작해보자.

배포를 시작하면 위 사진처럼 된다. 기존에 listener와 연결되어 있던 대상 그룹에 그대로 2개의 작업이 실행 중이며 트래픽도 100% 가고 있다. 이 시점에서는 새로운 배포버전이 대기중인 대상 그룹(위에서 봤던 사용하지 않는 상태로 유지되던 대상그룹)으로 묶여 배포된다.  

새로운 버전이 배포되면 해당 버전으로 트래픽이 전부 옮겨진다.  (Fargate에서는 한번에 100% 트래픽을 전부 옮기는 것만 지원) 

아직 기존 대상 그룹내 작업들이 실행 중이기 때문에 작업이 총 4개가 되어있는 모습이다. 그럼 배포가 종료된 후의 모습을 보자.

작업이 2개로 줄어들었고 로드밸런서(8001:9001)에 연결된 대상 그룹이 todsolution-tg-account-t로 변경된 것을 볼 수 있다. 

 

위의 모습을 보기 쉽게 그리면 아래처럼 된다.

결론은 대상 그룹을 한 번씩 번갈아 사용하면서 배포하게 된다.