AWS ECS(with Fargate), GitHub, DockerHub, CircleCI를 활용해 서비스 자동 배포 하기(1)

modolee
Day34 Inc.
Published in
3 min readDec 2, 2019

기존 서비스 배포 시 프로세스의 불편함 점을 파악하고 개선하기 위해 도입한 과정을 총 3편에 걸쳐서 소개하려고 한다.

  1. 문제점 파악 및 개선방안
  2. AWS ECS 설정
  3. Circle CI 설정 및 자동 배포 적용

기존 서비스 배포 시 프로세스

Local 개발

  • 기능 개발/수정
  • Docker 서버를 띄워서 개발/수정 한 부분 확인
  • Github에 Push

Code Review

  • Develop branch에 merge 하기 위한 PR 생성
  • Reviewer가 Code Review 진행
  • Reviewer의 Local에서 Docker 서버를 띄움
  • 패키지 업데이트, 환경 변수 수정, DB 마이그레이션 등 반영 된 부분 실행
  • 개발/수정 한 부분 확인
  • 이상이 없는 경우 merge 승인

Dev 배포

  • Dev 서버에 ssh로 접속
  • Github에서 Develop branch 소스 Pull
  • 패키지 업데이트, 환경 변수 수정, DB 마이그레이션 등 반영 된 부분 실행
  • 개발/수정 한 부분 확인 (읽기/쓰기 모두 테스트)
  • 이상이 없는 경우 Master branch에 merge 하기 위한 PR 생성 후 merge

Prod 배포

  • Prod-temp 서버에 ssh로 접속
  • Github에서 Master branch 소스 Pull
  • 패키지 업데이트, 환경 변수 수정, DB 마이그레이션 등 반영 된 부분 실행
  • 개발/수정 한 부분 확인 (읽기만 테스트 가능, 실 DB 연결 됨)
  • 이상이 없는 경우 AMI 이미지 생성
  • 생성 된 AMI 이미지를 기반으로 AutoScaling 시작 구성 생성
  • 새롭게 만든 시작 구성을 반영하여 AutoScaling 설정 변경 및 인스턴스 개수 2개로 증가 시킴
  • 새로운 버전이 반영 된 인스턴스가 Healthy 한 상태가 될 때 까지 기다림
  • 새로운 버전의 인스턴스가 모두 연결 되면, 예전 버전의 인스턴스를 모두 제거

불편 했던 점

  • 시간이 오래 걸린다.
  • 과정이 복잡하다.
  • 복잡한 과정 때문에 실수의 여지가 많다.
  • 동일하게 반복되는 과정이 많다.
  • 일시적으로 만 사용하는 인스턴스가 있다.
  • 직접 Dev, Prod 서버에 접속해서 작업해야 한다.

개선 방안

  • 동일하게 반복되는 과정을 줄인다. -> Docker 이미지 저장소 사용 (AWS ECR vs Docker Hub) -> Docker Hub 사용
  • 컨테이너 자원을 자동으로 관리한다. -> Container Orchestration 사용 (AWS ECS, EKS, Kubernetes 등) -> AWS ECS 사용
  • 자원 낭비를 줄인다. -> AWS ECS에서 Fargate 사용
  • 자동 통합 테스트 및 자동 배포를 한다. -> CI / CD 툴 사용 (CI / CD Tool 비교) -> CircleCI 사용

연관 글

--

--