본문 바로가기
활동/크래프톤 정글 2기

01 | 무중단 배포환경 구축(Blue/Green) - 2

by lucid_07 2023. 10. 6.
반응형

 

이 글에서 구축하려고 하는 내용은 2, 3, 4 과정이다.

 

구축

Code Deploy의 배포 과정은 다음과 같다.

  1. 애플리케이션 최상단 경로에 AppSpec.yml 파일(배포에 필요한 절차 명세)을 추가한다.
  2. 특정 버전에 대한배포 요청이 들어오면, Code Deploy는 배포할 EC2 인스턴스에 설치된 Code Deploy Agent들과 통신하여 Agent들에게 요청 버전을 배포해달라고 요청한다.
  3. Agent들은 코드 저장소(여기에서는 jar파일이 저장된 S3)에서 프로젝트 전체를 서버에 내려받고, AppSpec.yml 파일의 절차대로 배포를 진행한다.
  4. Agent는 배포 후 성공/실패 여부를 알려준다.

 

3. Code Deploy를 활용한 자동 배포 루틴 만들기

(1) EC2 세팅

  • 인바운드 규칙: ssh 접속은 현재 내 IP, HTTP, HTTPS 포트인 80, 443 포트 허용
  • Java 설치: JDK 17 버전을 설치하였다.
  • Code Deploy Agent 설치 레퍼런스를 참고하여 Code Deploy Agent를 설치한다(EC2는 Ubuntu를 사용하였다).

(2) EC2에 IAM 역할 부여

  • EC2를 위한 IAM 역할을 생성하고, 정책에는 Amazon 3S FullAccess와 AWSCodeDeployFullAccess를 설정해 준다.
  • 역할을 만들었다면 EC2 대시보드에서 앞서 만든 EC2에 만든 역할을 부여한다.

(3) Code Deploy를 위한 IAM 역할 생성: Code Deploy 실행 전에 만들어 두자

  • Code Deploy를 위한 역할 생성하고, 정책에는 AWSCodeDeployRole을 부여한다.

(4) Code Deploy 생성 및 설정

  • Code Deploy - 애플리케이션 - 애플리케이션 생성 에서 이름, 컴퓨팅 플랫폼(EC2)를 설정한다.
  • 배포 그룹을 설정한다: 배포 그룹을 생성하여, 배포 그룹의 이름과 (3)에서 만든 IAM을 설정해 준다.
    • 배포 방법에 현재 위치와 블루/그린이 있는데,
    • 현재 구현은 한 EC2 서버 내에서 최소 단위 배포를 하므로 Code Deploy가 무중단 배포 역할을 하지는 않는다. → NginX가 한다.
    • 따라서 현재 위치 배포 방식을 선택해 준다.
  • 환경 구성은 EC2 인스턴스를 선택하고 만들어 두었던 EC2인스턴스의 태그를 입력해 준다.
  • 배포 설정은 여러 서버에 배포할 때의 방식이지만 한 대에 배포하므로 CodeDeployDefault.AllAtOnce로 선택한다.
  • 로드 밸런서는 사용하지 않았으므로 선택 해제
  • AppSpec.yml에는 다음과 같이 설정해 준다.
# appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/XXXXXX/ # 프로젝트 이름, S3에서 받아온 위치를 설정한다.
    overwrite: yes

permissions:
  - object: /
    pattern: "**"
    owner: ubuntu
    group: ubuntu

(4) Github Actions 스크립트 추가

      - name: Code Deploy
        run: aws deploy create-deployment --application-name roadmaker --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name personal-deploy --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$PROJECT_NAME/$GITHUB_SHA.zip
  • application-name: CodeDeploy 애플리케이션의 이름
  • deployment-config-name: 배포 그룹 설정에서 선택했던 배포 방식
  • deployment-group-name: 배포 그룹의 이름
  • s3-location: jar를 S3에서 가지고 오기 위해 차례로 bucket 이름, 파일 타입, 파일 경로를 입력

설정 후, Code Deploy Agent가 EC2 IAM 설정 전에 켜졌으므로 Code Deploy Agent를 껐다 켜 주자.

sudo service codedeploy-agent restart

 

반응형

'활동 > 크래프톤 정글 2기' 카테고리의 다른 글

01 | 무중단 배포환경 구축(Blue/Green) - 1  (0) 2023.09.08
나만의 무기 : 회고  (0) 2023.09.06