Back-end/AWS

Git Action을 이용한 CI/CD 및 배포 설정

개발자 키우기 2023. 5. 31. 17:43

1. 보안 그룹 생성

  • 새로운 보안 그룹  만들기
  • 인바운드 규칙에서 내 IP에서 DB를  관리 할 수 있도록 설정
  • 엘라스틱빈스톡에서 생성되는 보안그룹이 DB를 관리 할 수 있도록 설정 ( 엘라스틱빈스톡 생성 이후 설정 )

2. RDS 생성

  • 표준 생성 선택
  • 해당 DB 엔진 선택
  • 프리 티어 선택
  • DB 인스턴스 식별자 / 사용자 이름 / 비밀번호 설정
  • 퍼플릭 액세스를 예로 선택 ( 내 컴퓨터에서 db를  관리 할 수 있도록 )
  • 기존 VPC 보안 그룹에서 위에서 순서1에서 설정 한 보안 그룹을 선택하고 default는 삭제
  • RDS 생성
  • 파라미터 그룹에서 파라미터 그룹 생성
  • 이름 설정하고 생성
  • 생성한 파라미터 눌러서 검색창에 zone을 검색 후 파라미터 편집을 눌러서 time_zone을 Asia/Seoul로 변경 후 변경 사항 저장
  • 마찬가지로 검색창에 character_set를 검색 후 모든 값을 utf8mb4로 변경 후 저장
  • 생성된 RDS 편집을 누른 뒤 DB 파라미터 그룹을 생선한 파라미터로 변경 후 계속
  • 즉시 적용을 누른 뒤 DB 인스턴스 수정
  • 수정이 완료 되면 작업을 눌러서 재부팅

3. DB 설정 ( 마리아 DB )

  • HeidiSQL 실행 후 호스트명은 RDS 앤드포인트 로 설정
  • 사용자와 비밀번호는 RDS 에서 설정 한 값 입력 후 열기
  • CREATE DATABASE _____;  DATABASE  생성
    USE _____; USE 생성
    ALTER DATABASE _database명_ CHARACTER SET = 'utf8mb4' COLLATE = 'utf8mb4_general_ci'; DB UTF-8설정
    SHOW VARIABLES LIKE 'c%'; 인코딩 설정 확인
    SELECT @tIME_ZONE, NOW(); 타임 확인 까지 완료 되면 테이블 및 관계 설정

4. Elastic Beanstalk 생성

  • 애플리케이션 생성
  • 웹 서버 환경 선택
  • 애플리케이션 이름 설정
  • 플랫폼과 플랫폼 브랜치 알맞게 선택
  • 프리셋에서 사용자 지정 구성을 선택 후 다음
  • 새 서비스 또는 기존 서비스 역할 사용
  • EC2 키 페어 선택
  • EC2 인스턴스 프로파일 선택 (참고 IAM 역할 만들기 - https://twosharkbaby.tistory.com/22 ) 후 다음
  • VPC 기존꺼 선택
  • 퍼플릭 IP 주소 활성화 및 인스턴스 서브넷 모두 체크 후 다음
  • IMDSv1 활성화로 변경
  • 보안 그룹은 선택하지 않음
  • 오토 스케일링 그룹에서 환경 유형은 밸런싱된 로드로 변경
  • 인스턴스는 최소값2 최대값4로 설정
  • 로드 밸런서 유형은 애플리케이션 로드 밸런서로 유지 후 다음
  • 관리형 업데이트는 비활성화
  • 배포 정책은 변경 불가 선택
  • 환경 변수 설정 ( RDS_DB_NAME / RDS_HOSTNAME / RDS_PASSWORD / RDS_PORT / RDS_USERNAME 등 )
  • 다음 후 생성 ( RDS 보안 그룹 마무리 설정 )

5. 배포

  • Visual studio 터미널 열어서 git clone을 통하여 파일 받고 열기
  • CD 때 필요한 파일 ( .ebextensions\00-makeFiles.config ) 설정

 

files:
  "/sbin/appstart":
      mode: "000755"
      owner: webapp
      group: webapp
      content: |
          #!/usr/bin/env bash
          JAR_PATH=/var/app/current/application.jar

          # run app
          java -Dspring.profiles.active=prod -Dfile.encoding=UTF-8 -jar $JAR_PATH

 

  • CI 때 필요한 파일 ( github\workflows\deploy.yml 과 Procfile ) 설정

 

name: aws-v5
on:
  push:
    branches:
      - main

# actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다.
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: 11
          distribution: zulu
      - name: Pemission
        run: chmod +x ./gradlew
      - name: Build with Gradle
        run: ./gradlew clean build

      # UTC가 기준이기 때문에 한국시간으로 맞추려면 +9시간 해야 한다
      - name: Get current time
        uses: 1466587594/get-current-time@v2
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss
          utcOffset: "+09:00"
 
      - name: Show Current Time
        run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"

     # EB에 CD 하기 위해 추가 작성
      - name: Generate deployment package
        run: |
          mkdir deploy
          cp build/libs/*.jar deploy/application.jar
          cp Procfile deploy/Procfile
          cp -r .ebextensions deploy/.ebextensions
          cd deploy && zip -r deploy.zip .
      - name: Deploy to EB
        uses: einaregilsson/beanstalk-deploy@v21
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
          aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
          application_name: aws-v5-beanstalk # 엘리스틱 빈스톡 애플리케이션 이름!
          environment_name: Aws-v5-beanstalk-env # 엘리스틱 빈스톡 환경 이름!
          version_label: aws-v5-${{steps.current-time.outputs.formattedTime}}
          region: ap-northeast-2
          deployment_package: deploy/deploy.zip
springapp: appstart

 

  • 깃허브 사이트의 해당 프로젝트 들어가서 action을 활성화
  • IAM AccessKey 만들기( https://twosharkbaby.tistory.com/25 )
  • 해당 프로젝트 Settings의  Secrets and variables에서 Secrets를 생성 ( AWS_ACCESS_KEY / AWS_SECRET_KEY )
  • 터미널에 git add .  =>  git commit -m "내용"  => git push origin main
  • PUSH가 되면 깃허브 Actions 에서 배포가 시작 됨 

6. NLB ( Network Load Balancer ) 설정

  • EC2에서 탄력적 IP 주소 할당 생성
  • 로드밸런서에서 로브밸런서 생성
  • Network Load Balancer 생성 선택
  • Load balancer name 설정
  • Network mapping의 Mappings에서 탄력적 IP 선택
  • Listeners and routing의 Default action에서 Create target group 선택
  • Application Load Balancer 선택하고 Target group name 설정 후 next
  • Register Application Load Balancer의 Application Load Balancer에서 로드밸런서 선택 후 생성
  • 다시 Listeners and routing의 Default action에서 생성한 타켓 그룹을 선택 후 생성

7. 도메인 주소 만들기

  • 가비아

 

- 출처 메타코딩 최주호