[AWS] Elastic Beanstalk + Elastic Cache + GithubActions + SpringBoot CI/CD 배포하기 (5)

lkdcode·2023년 12월 20일
0

AWS 배포하기

목록 보기
5/5
post-thumbnail

Spring Boot 를 AWS 로 배포해보자.
PRJ : Spring Boot (java17)
배포 : Elastic Beanstalk
DB : RDS (MySQL) Elastic Cache Redis
CI/CD : GithubAcations

이전 포스팅에서 Elastic Beanstalk.jar 를 배포했다.
매번 구현할 때마다 프로젝트를 build 해서 배포할 수 없는 법!
GithubActions 를 이용해 CI/CD 를 구축하자.

💡 GithubActions

1

프로젝트 최상단에 cicd.yml 을 생성해 줘야 한다.
디렉토리부터 오탈자 없이 생성
.github -> workflows -> cicd.yml

이제 cicd.yml 을 설정해야한다.

# 워크 플로우의 이름
name : CI/CD

# 워크 플로우가 시작될 브랜치 지정
on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest # 실행 환경 지정
    # 실행 스텝 지정
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-java@v3
        with:
          distribution: 'corretto'
          java-version: '17'

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
	  
      # 테스트 환경
      - name: Build and Test with Gradle
        run: ./gradlew clean build test
        env:
          SPRING_DATASOURCE_URL: jdbc:h2:mem:test;MODE=MYSQL
          SPRING_DATASOURCE_DRIVER_CLASS_NAME: org.h2.Driver
          SPRING_DATASOURCE_USERNAME: sa
          SPRING_DATASOURCE_PASSWORD: password

      - name: Build with Gradle
        run: ./gradlew clean build

      # 현재 시간 가져오기
      - name: Get current time
        uses: josStorer/get-current-time@v2.0.2
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss
          utcOffset: "+09:00"

      # 배포용 패키지 경로 저장
      - name: Set artifact
        run: echo "artifact=$(ls ./build/libs)" >> $GITHUB_ENV

      # 빈스토크 배포
      - name: Beanstalk Deploy
        uses: einaregilsson/beanstalk-deploy@v20
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          application_name: temfriend
          environment_name: temfriend-env
          version_label: github-action-${{ steps.current-time.outputs.formattedTime }}
          region: ap-northeast-2
          deployment_package: ./build/libs/${{ env.artifact }}

💡 AWS IAM

2

권한 설정을 위해 IAM -> 대시보드 -> 사용자 아래 숫자 클릭

3

사용자가 없다면 생성을 해주고 권한을 준다.
이렇게 생성된 사용자는 권한에 따라 관리를 하는데
루트 계정을 사용하지 않고 권한들을 분사해서 관리한다.

4

필자는 하나의 IAM 계정으로 관리하기에 생성하지 않았고,
중요한건 AdministratorAccess-AWSElasticBeanstalk 권한이 있어야 한다는 것

5

생성된 사용자를 클릭하고 보안 자격 증명 탭에서 엑세스 키 만들기 를 클릭

6

액세스 키 만들기 클릭 (둘 중 아무거나)

7

서드 파티 서비스 , 확인 체크 후 다음

8

설명 태그 값은 선택 사항이다. 액세스 키 만들기

9

AccessKey 와 SecretAccessKey 를 발급받는다.
재발급 불가, 메모 or .csv 알아서 잘 관리한다.

💡 Github Actions

10

해당 프로젝트의 Repository -> Settings -> Secrets and variables -> Actions
이 후 Repository secrets 에서 New repository secret

11

아까 발급 받은 AccessKey 와 SecretAccessKey 를 생성해준다.
이후 커밋하고 푸쉬를 하면 완료 Repository -> Actions 에서 확인이 가능하다.

이상 SpringBootPrj 를 EB 에 배포하고 GithubActions 를 통해 CI/CD 환경을 구축했다. 👊

profile
되면 한다

0개의 댓글