AWS CodeDeploy
。Amazon EC2, AWS Lambda 등 다양한 복수의 VM에서 어플리케이션 배포를 자동화 및 무중단 배포를 가능하게하는 서비스
▶ 수동으로 EC2 인스턴스의 서버에 접속해서 배포를 할 필요 없이 AWS CodeDeploy를 통해 CD를 구현하여 배포를 자동화 및 무중단 배포
。CodeDeploy Agent를 활용
▶ 사전에 Outbound 443이 열려있어야하며, CodeDeploy 서비스로 접근이 가능해야함.
。S3, Github, Bitbucket 등의 Source로부터 배포를 받아서 EC2 인스턴스에 배포를 대리로 수행
▶ Github Actions를 통한 CI/CD 구현시에서 주로 활용
CodeDeploy 구성
Application :
。CodeDeploy의 구분단위
▶ EC2 / On-Premise, Lmabda, ECS 등의 플랫폼을 지원
배포 그룹 :
。배포 대상을 묶은 그룹
▶ Application( ex. EC2 / On-Premise 어플리케이션 )의 종류에 따라 다른 구성을 적용하는 용도
。그룹 별로 별도로 트리거, 롤백 등의 설정가능
CodeDeploy의 롤백
。배포에 실패하거나 사용자에 의한 롤백 기능 존재
자동 롤백 : CloudWatch Alarm으로 트리거되어 특정 임계치가 넘는 경우 이전 버전으로 롤백
수동 롤백 : 수동으로 롤백
AppSpec.yml
。CodeDeploy에서 수행할 내용을 정의하는 yml문서
▶ 배포 방식, 각 Stage 별 수행내용 정의
AWS CodeDeploy의 무중단 배포 전략
。무중단배포 : downtime이 없음.
。In-Place, Rolling, Blue/Green, Canary
。EC2 인스턴스 / On-Premise 방식 :
In-Place, Blue Green
。ECS / Lambda :
Canary, Blue Green
In-Place , Rolling 배포방식
。컴퓨팅 자원의 업데이트 비율에 따라 All-At-Once, Half-At-A-Time, One-At-A-Time가 존재.
In-Place 배포방식 :

。인프라 교체없이 기존 인프라에 배포된 SW를 업데이트하여 프로비저닝
▶ 기존 배포중인 EC2에 새로운 SW를 업데이트하여 다시 배포
。기존의 인프라를 그대로 재활용하므로 빠른 특징이 존재
Rolling 배포방식

。점진적으로 기존 인프라를 제거 및 새로운 인프라로 업데이트된 SW를 추가하여 교체하면서 프로비저닝하는 방식
▶ 배포중인 기존 EC2를 삭제 및 새로운 EC2에 SW를 업데이트하여 배포
Blue / Green 배포 방식


。기존 단위 클러스터( = Blue ) 내 컴퓨팅자원들을 완전히 별도의 새로운 클러스터 ( Green )로 한번에 프로비전 및 트래픽을 교체하는 방식
。Green을 충분히 테스트할 수 있으며 Green에 문제 발생 시 Blue로 Rollback도 안정적으로 수행가능
。트래픽 중단을 최소화 할 수 있음.
。동시에 Blue와 Green의 인프라를 모두 유지하므로 비용이 많이 발생하는 단점이 존재
Canary 배포 방식
。Blue/Green 배포에서 일정비율로 트래픽 전환을 수행하면서 클러스터를 점진적으로 교체하는 방식
▶ 일정 비율의 트래픽을 점진적으로 전환하면서 에러 발생 시 다시 초기상태로 Rollback하여 안정성 향상
X-Percent-Every-N-Minute : 분당 몇퍼센트 비율로 교체
。Green으로 한번에 트래픽을 전환하는 Blue/Green 배포 방식보다 안정적이나 배포에 오랜 시간이 소요되는 단점이 존재