블루 그린 무중단 배포 적용기

2023. 5. 9. 23:44개발공부/DevOps

블루 그린 배포방식 적용기

image

AWS blue-green

  • 이유: 사내 AWS ec2 인스턴스와 ELB(Elastic Load Balance) 사용중

Auto Scaling

  • 전통적인 DNS 방식보다 세분화 돼있지 않지만, Auto Scaling groups를 설정해 실행할 수 있단 장점이 있습니다.
  • health checks를 통해 비정상적 인스턴스가 있으면 새 인스턴스를 구동해 maximum 인스턴스를 유지합니다.
  • 배포할 때 green 인스턴스를 ELB(Elastic Load Balancer)에 추가해주면 LB는 green 인스턴스를 선호하기 때문에 트래픽을 green 인스턴스로 보냄
  • green 인스턴스를 Auto Scaling group에 추가할 때 blue 인스턴스는 종료하거나 스탠바이 상태에 둡니다. 롤백을 위해 스탠바이 상태를 권장합니다.
  • green 인스턴스가 문제없이 배포가 되었다면 그룹 사이즈를 0으로 변경합니다. 롤백이 필요할 땐 load balancer를 green group으로부터 분리해 green 그룹 사이즈를 0으로 변경합니다.

ELB 라우팅 알고리즘

  • 라우팅 알고리즘을 target group에 설정하지 않았다면, 디폴트는 Round-robin 알고리즘.
  • least outstanding requests 설정으로 변경하면, 가장 적은 요청을 처리중인 인스턴스로 트래픽을 보냅니다(규모가 크고 인스턴스마다 스펙이 다른 서비스일 때 유용합니다.)

image

블루 그린 배포방식 절차 (CodeDeploy를 왜 사용하는가)

  • 무엇보다 큰 장점은 AWS EC2에 배포할 때 무료
  • 레퍼런스가 많음 (ex. 향로님 블로그 - Travis CI + CodeDeploy)
  • 수천 개 인스턴스에 대한 배포가 가능합니다.
  • 최신 애플리케이션 수정이 대체 인스턴스에 설치됩니다. (appspec.yml에 실행 설정)

image

  • 새로운 환경 테스트를 완료하고 대체 인스턴스로 트래픽을 라우팅 합니다.
  • 인스턴스를 프로비저닝 하고 최신 애플리케이션을 대체 인스턴스에 설치
  • 문제가 있는 경우 자동 배포 중지, 롤백 가능합니다.
  • 대체 인스턴스 ELB에 등록, 트래픽 라우팅. 원래 환경의 인스턴스는 등록 취소, 종료

EC2/온프레미스 컴퓨팅 플랫폼의 블루/그린 배포 방법

image

  • Auto Scaling 그룹
  • 인스턴스 CodeDeploy 에이전트 설치
  • 배포 그룹 생성 시 대체 환경 지정 방법
    • 기존 Auto Scaling 그룹 복사: CodeDeploy는 배포 중 대체 환경에 필요한 인스턴스 만듦. 이 옵션 선택하면 지정한 Auto Scaling 그룹을 대체 환경의 템플릿(동일한 수의 실행 인스턴스 및 여러 가지 기타 구성 옵션을 포함)을 사용
    • (* 시작 템플릿에 대한 자세한 내용은 후술)
  • 운영방식
  1. 원본 환경으로 작동할 인스턴스 또는 Auto Scaling 그룹이 이미 있어야합니다. 블루/그린 배포를 처음 실행할 땐 일반적으로 인 플레이스 배포에서 이미 사용된 인스턴스를 사용
  2. 새로운 블루/그린 배포 그룹을 만들어 다음을 지정
  • 대체 환경으로 트래픽을 라우팅할 로드 밸런서
  • 대체환경으로 트래픽을 즉시 라우팅, 수동 라우팅할 때까지 대기 여부
  • 대체된 인스턴스를 종료 또는 계속 실행할지 여부
  1. 이벤트가 발생하는 동안 배포 그룹에 대한 배포 생성
  • 대체 환경에 필요한 인스턴스 프로비저닝
  • 애플리케이션 수정이 대체 인스턴스에 설치
  • 대체 환경 인스턴스가 ELB에 등록. 트래픽이 대체 환경으로 라우팅
  • 인스턴스가 종료 또는 계속 실행

젠킨스 설치방법

젠킨스에 GitHub 트리거 설정 추가

rm -rf ./deploy
mkdir ./deploy
cp -R ./baekho ./deploy

```

Jenkins에서 빌드 후 AWS CodeDeploy 작업 등록

  • AWS CodeDeploy 플러그인 다운로드

AWS CodeDeploy 설정

AWS Auto Scaling 그룹 설정

image

  • EC2 이미지 생성: EC2 인스턴스 설정을 바탕으로 AMI를 생성해줌
    • 디폴트 설정: yum update, java, codeDeploy install, aws configure, locale
  • 인스턴스 생성 시 이름 넣고 싶으면 Name-Value 태그 넣어주기

image

  • ASG 권한 추가
  • 배포 완료 시 CodeDeploy의 ASG는 최신 버전으로 자동 변경됨

AWS ELB 설정

image

남은 과제

  • 이로써 블루 그린 배포를 성공했지만, 당면한 과제도 있었습니다. 현재 인스턴스에 prometheus를 붙여 Grafana 대시보드로 모니터링 하고 있지만, 블루 그린 배포로 인해 새로운 인스턴스가 생긴다면 그때마다 prometheus의 job ip 주소를 재설정 해줘야하기 때문입니다. 하지만 이 문제도 terraform와 같은 인프라 자동화 관리 툴을 사용해 해결할 수 있을 것 같습니다.