[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

notion image
프로젝트 최상단에 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

notion image
권한 설정을 위해 IAM -> 대시보드 -> 사용자 아래 숫자 클릭
notion image
사용자가 없다면 생성을 해주고 권한을 준다.
이렇게 생성된 사용자는 권한에 따라 관리를 하는데
루트 계정을 사용하지 않고 권한들을 분사해서 관리한다.
 
notion image
필자는 하나의 IAM 계정으로 관리하기에 생성하지 않았고,
중요한건 AdministratorAccess-AWSElasticBeanstalk 권한이 있어야 한다는 것
 
notion image
생성된 사용자를 클릭하고 보안 자격 증명 탭에서 엑세스 키 만들기 를 클릭
 
notion image
액세스 키 만들기 클릭 (둘 중 아무거나)
 
notion image
서드 파티 서비스 , 확인 체크 후 다음
 
notion image
설명 태그 값은 선택 사항이다. 액세스 키 만들기
 
notion image
AccessKey 와 SecretAccessKey 를 발급받는다.
재발급 불가, 메모 or .csv 알아서 잘 관리한다.
 

💡 Github Actions

notion image
해당 프로젝트의 Repository -> Settings -> Secrets and variables -> Actions
 
이 후 Repository secrets 에서 New repository secret
notion image
 
아까 발급 받은 AccessKey 와 SecretAccessKey 를 생성해준다.
이후 커밋하고 푸쉬를 하면 완료 Repository -> Actions 에서 확인이 가능하다.
이상 SpringBootPrj 를 EB 에 배포하고 GithubActions 를 통해 CI/CD 환경을 구축했다. 👊