AWS EC2, RDS 사용 CD 구축하기

Sun choi·2024년 10월 20일

NEW 지식

목록 보기
27/34

CI/CD에서 CD란!

배포를 자동화하는 작업을 기술해서 빠르고 간편하게 배포.
main 브랜치에 merge할 시 자동으로 기존 도커 컨테이너를 삭제하고 새로운 이미지로 컨테이너 실행 및 배포하는 과정!

CI와 동일하게 GithubActions를 사용하였고, 구축 절차는!
1.데이터베이스를 AWS의 RDS와 연동
2.AWS EC2 생성
3.EC2에 docker 설치하여 연동
4. Github Actions CD 파이프라인 파일 작성
이렇게 입니다.

1.데이터베이스를 AWS의 RDS와 연동

MySQL과 연동한 RDS를 만들고 그의 Endpoint 인텔리제이의 데이터베이스 Host,그리고 해당 포트번호(MySQL은 기본 3306임)를 입력해준다.
그리고 RDS를 만들때 넣어줬던 유저 네임과 패스워드, 데이버테이스 이름까지 넣어준후 Test Connection를 해준다.
그리고 application.properties에서 기존값을 수정해주면 RDS 연동 끝!


2.AWS EC2 생성


Ubuntu로 EC2를 생성해주고, 생성과정에서 Key pair도 같이 생성해준다.

SSH 프로토콜은 다른 것들보다 보안이 상대적으로 뛰어나기 때문에 SSH를 통해 접속할 예정이다.
SSH 프로토콜은 기본적으로 TCP의 22번 포트를 쓰기 때문에, 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능하다.

Mac이 SSH가 있기 때문에 기본적인 명령어를 통해 접근이 가능

터미널을 열고

ssh -i 받은키페어의위치 ubuntu@AWS에적힌내아이피

해당 명령어를 입력해준다.
예를 들어 이런 형태가 된다.

ssh -i /Users/Documents/AWS/newkeypair.pem ubuntu@3.36.123.456

그럼 터미널에서 ssh 통해 나의 EC2에 접속하게 되는데!
이 터미널을 계속 사용하기 떄문에 끄지 않고 놔둬야한다.


3.EC2에 docker 설치하여 연동

그런 다음 내 EC2에 도커를 설치하고 로그인까지 해야하는데

AWS EC2(Ubuntu)에 Docker 설치하는 방법

이 포스팅이 너무 잘 나와있기 때문에 그대로 설치를 해주면 되고,
설치를 완료 했으면 내 DockerHub 계정과 연동해주기 위해 로그인까지 해준다.

위의 ssh 연결한 터미널에서

docker login -u 도커허브계정이메일주소

를 입력해준뒤 비밀번호까지 입력해주면
Login Succeeded 라고 나온다. 그럼 완료!

그 다음 위 이미지처럼 Docker 컨테이너 이미지를 Docker Hub로부터 로컬 시스템으로 가져오는 단계를 거쳐야한다.

docker images
로컬 시스템에 저장된 Docker 이미지를 확인하는 명령어

docker pull sunchoii/neo
Docker Hub에서 sunchoii/neo라는 이미지를 다운로드하는 명령어
(이 프로젝트의 이미지 업로드해둔것을 도커허브에 가져와)


4. Github Actions CD 파이프라인 파일 작성

name: Deploy to EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      # GitHub에서 소스 체크아웃
      - name: Checkout code
        uses: actions/checkout@v4

      # EC2에 SSH로 연결하여 Docker 이미지 Pull 및 실행
      - name: Deploy Docker Image to EC2
        uses: appleboy/ssh-action@v0.1.8
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USER }}
          key: ${{ secrets.EC2_SSH_KEY }}
          port: 22
          script: |   
            # Docker 서비스 시작
            sudo systemctl start docker

            # 기존 컨테이너 중지 및 삭제
            docker stop neo || true
            docker rm neo || true

            # 최신 Docker 이미지 Pull
            docker pull sunchoii/neo:latest

            # 새로운 컨테이너 실행
            docker run -d -p 8080:8080 --name neo -e JWT_SECRET_KEY=${{secrets.JWT_SECRET_KEY}} -e CLOUD_AWS_CREDENTIALS_SECRETKEY=${{secrets.AWS_SECRET_KEY}} -e CLOUD_AWS_CREDENTIALS_ACCESSKEY=${{secrets.AWS_ACCESS_KEY}} -e SLACK_WEBHOOK_URL=${{secrets.SLACK_URL}} sunchoii/neo:latest

위는 CD 워크플로우 파일 작성한 모습이다.
Github Actions에서 CI파일을 겨쳐 이 파일이 Action 되면 기존에 있던 도커 컨테이너가 삭제되고 main에 pull request한 해당 파일의 이미지가 업로드되면서 새로운 컨테이너가 실행된다. 자동으로 배포가 되는 과정이다.

CI나 CD 스크립트 파일에서 필요한 중요한 키값들은 Github 내 Secret Key에 저장해 놓았다.

구축하면서 진짜 수많은 에러가 나왔지만 기본적인 플로우는 이렇다.
이번 프로젝트에 CI/CD를 맡아서 해볼 수 있어 진짜 귀한 경험이였고, 이제 이번 프로젝트 회고록을 쓰러 고고싱하겠습니다.


[IntelliJ] MySQL AWS RDS 인텔리제이에 연결하기

[AWS] EC2, RDS를 이용해 배포하기 1 - RDS 설정 및 인텔리제이와 연결 편

[AWS] EC2, RDS를 이용해 배포하기 2 - EC2 서버 구매 및 배포 편

AWS EC2(Ubuntu)에 Docker 설치하는 방법

CD 구축에 적극 참고했던 자료들입니다.

profile
풀스택 개발자의 공부기록 📖

0개의 댓글