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

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

Tags
AWS
ElasticBeanstalk
ElasticCache
GithubActions
Published
December 24, 2023
Author
lkdcode
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 환경을 구축했다. 👊