본문 바로가기

Spring + Kotlin API Server 만들기 (6) : AWS EB + github action으로 CI/CD 구축

CI/CD

만들어진 API Server를 배포하기 위해 aws의 elastic beanstalk 서비스와 git action을 이용할 계획이다.

GitHub Action

github에서 push, merge 등을 할때 수행하는 workflow를 정의할 수 있다.

1. github repository에서 action 선택

2. set up a workflow yourself 선택

3. 다지우고 커밋

 

4. local에서 git pull

이제 git action을 위한 파일은 다 만들어졌다. study.yml을 다음과 같이 수정한다.

name: Deploy Device API Server
on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

        - name: Checkout source code
          uses: actions/checkout@v2

        - name: Set up JDK 11
          uses: actions/setup-java@v2
          with:
            distribution: 'adopt'
            java-version: '11'
            cache: 'gradle'

        - name: Add permission for gradlew
          run: chmod +x ./gradlew
          shell: bash

        - name: Build with Gradle
          run: ./gradlew clean build -x=jar
          shell: bash

        - name: time for Versioning
          uses: 1466587594/get-current-time@v2
          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: 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: spring_kotlin_study
            environment_name: Springkotlinstudy-env
            version_label: main-${{ steps.current-time.outputs.formattedTime }}
            region: ap-northeast-2
            deployment_package: ./build/libs/${{env.artifact}}
            wait_for_environment_recovery: 30

Elastic Beanstalk 설정

Screenshot from 2022-02-15 23-03-001. 어플리케이션 생성 클릭

2. 이름 입력

3. 플랫폼 선택

jvm을 사용하기 때문에 java를 선택한다.

4. 코드 업로드(로컬에 있는 build/libs/ 안에 있는 .jar파일을 선택)

5. 추가 옵션 구성 선택(프리티어 사용할 것이므로 단일 인스턴스 선택 후 저장)

6. 추가옵션에서 소프트웨어 수정 후 앱생성

7. 기다림

8. 어플리케이션 생성 완료

9. EC2 인스턴스 확인

인스턴스가 자동 생성되었다

8. AWS ACCESS KEY 발급

보안 자격 증명 클릭
access key 발급

9. github repository setting secret에 aws access key 설정

이제 githup repository main branch에 push할 때마다 자동으로 배포가 된다!!!

처음 push 했을때
배포 성공시

 

이제 elastic beanstalk dns로 접속하여 만든 API 문서를 확인하면 다음과 같이 잘 나온다.

정상적으로 배포된 모습

추가적인 Route53으로 호스팅하기

기존에 route53에서 구매해 놨던 도메인이 있어 이걸로 호스팅을 추가로 해보기로 했다.

1. route 53 호스팅영역 확인

2. 레코드 생성

3. 라우팅 확인