AWS를 사용해 무중단 배포 자동화 환경 구축하기 시리즈
개요
AWS를 이용하여 가장 기본적인 형태의 인프라를 구축하고 GithubAction - CodeDeploy
를 이용하여 CI/CD 서버를 구축해보도록 하겠습니다.
- AWS의 기본적인 개념은 숙지하고 있다는 가정하에 진행됩니다.
- 블루 - 그린 배포 방식을 사용합니다.
서버 구성
최종적으로 구축할 웹서버 아키텍쳐는 다음과 같습니다. (직접 그린거라 삐뚤삐뚤합니다 ㅠㅠ…)
- 중간
Private Subnet
영역의Auto Scailing group
에 포함되지 않은 인스턴스는 많은 트래픽을 필요로 하지 않는 어플리케이션 입니다. (ex. 단순 조회용 사이트) Auto Scailing group
에 포함된 인스턴스는 많은 트래픽이 발생합니다. (ex. 대고객 사이트, 외부 연동 api 서버)Auto Scailing group
내부 인스턴스의 내부 구조는 웹서버로Nginx
를 두고 location 설정을 바탕으로Spring-Boot Applicaton
에 접근합니다. (ex. /api - api 서버로)
배포 구성
자동화 배포에 사용할 배포 구조는 다음과 같습니다.
- Github 에 코드를 commit & push 합니다.
- 미리 정의해둔 GithubAction Workflow에 의해 job이 실행됩니다.
- GithubAction은 어플리케이션을 빌드하고 S3 Bucket에 전송합니다.
- GithubAction은 CodeDeploy 에게 배포 명령을 내립니다.
- CodeDeploy는
블루-그린
배포방식을 바탕으로 새로운 인스턴스 그룹을 생성합니다. - 미리 정해둔 템플릿을 바탕으로 시작된 인스턴스는 S3 Bucket 에 저장된 빌드 파일(번들)을 다운받습니다.
- 빌드파일에 포함된 AppSpec.yml 파일을 바탕으로 배포를 진행합니다.
- 모든 배포가 성공적으로 끝나면 CodeDeploy는 Application Load Balancer의 트래픽을 새로운 타겟 그룹으로 변경하고, 기존의 그룹을 종료합니다.