처음 구상했던 아키텍쳐와 깃헙 엑션 deploy.yml

연어는결국강으로·2023년 1월 2일
0

AWS 배포기

목록 보기
2/3

처음엔 elasticbeanstalk으로 모듈3개를 하나의 인스턴스에 배포하고, 오토 스케일링으로 4대까지 늘어나도록 설정하고 엘라스틱 빈스톡 앱을 생성하였다. 이것을 Docker 플랫폼으로 설정하지 않고 Java 플랫폼으로 설정해서 우리의 엘라스틱 빈스톡은 Node.js 기반의 react서버를 실행하는 것이 아주 까다로웠다.

엘라스틱 빈스톡의 어플리케이션 로드밸런서를 네트워크밸런서를 하나 생성하고 이것에 탄력적 ip를 주고, aws에서 제공하는 mariadb rds(프리티어 무료)를 사용했다. mongodb도 aws에서 제공하는 것을 사용하려 했으나, 가장 저렴한 것이 월 38만원? 정도 나오는 엄청난 비용이 들어서 이것은 t2.micro를 하나 구매하여 여기에 탄력적 ip를부여하고 몽고디비를 설치하여 사용하는 식으로 했다.

그림으로 나타내면 대략 이런식이다.

여기에 Github Action을 이용하여 CI/CD를 하려고 했다.

깃헙 엑션은 이런식으로 이루어지는데, S3과 CodeDeploy는 이번에 알게되었다.(선생님이 S3을 설명해주긴 하셨다. IAM을 설명해주셨을 때 였던거 같다.)

내가 이 3가지 모듈을 배포하기 위해 짠 전략은
1. 스프링 모듈 하나 배포
2. 스프링 모듈 두 개를 배포
3. 리엑트 모듈까지 모두 배포
였다.

내가 처음 짠 deploy.yml은 아래와 같다.

name: ski-project
on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash
      - name: Build with Gradle
        run: ./gradlew clean build
        shell: bash

      - 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}}"
        shell: bash

      - name: Generate deployment package
        run: |
          mkdir -p 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@v20
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
          aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
          application_name: ski-project
          environment_name: Skiproject-env-1
          version_label: ski-project-${{steps.current-time.outputs.formattedTime}}
          region: ap-northeast-2
          deployment_package: deploy/deploy.zip

음... 지금와서 이 스크립트에 무슨 문제가 있었나? 하면 그건 아니었던것 같다. 아마도 경로 실수라던가, plain.jar를 없애는걸 깜빡했다던가 이런 잔 실수들을 걷어내고 나니 ip/의 경로에 해당하는 메서드를 만들지 않았던 것이 가장 큰 에로사항이었다고 생각한다. 그래서

이런식으로 홈을 추가하니 정상적으로 배포가 되었다.

이러고 나서 2번째 모듈까지는 나름 순조롭게 진행되었다.
첫 번재 모듈을 배포 진행한 것을 복붙하면 되었기 때문이다.

0개의 댓글