오봉이와 함께하는 개발 블로그

Github Actions & AWS를 이용한 CI/CD - 1 본문

BE

Github Actions & AWS를 이용한 CI/CD - 1

오봉봉이 2023. 10. 24. 23:41
728x90

개요

프론트, 백으로 나눠 사이드 프로젝트를 진행하는데 API 개발 후 프론트엔드 담당자가 개발을 하기 위해 환경 구성을 하는 것이 부담스럽다 생각해서 하게 되었다.
물론 Docker를 통해 말아줘도 되겠지만, 기능 추가마다 Docker 이미지를 말아서 Docker Hub에 올리거나 전달해줘야 하는 작업이 귀찮기도 했다.
귀찮음이 많은 개발자가 성공한다더니 이런 의미에서 하는 말들이 아닐까 싶다.

아직 설정해야 할 부분들이 산더미지만, 현재 commit 시점에 자동으로 AWS EC2 환경에 배포까지 마무리가 되어 포스팅을 하려 한다.

CI/CD

간단하게 CI/CD에 대해 알고 넘어가야 할 거 같다. 아래와 같은 의미들이 있다고는 하지만 내가 알고 있는 지식은
commit 하면 자동으로 빌드(테스트 과정 포함) 후 배포되어 접속이 가능한 상태로 만들어주는 것 정도이다.

  • CI

    • Continuous Integration (지속적인 통합)
    • 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합히는 것
    • 새로운 소스코드의 빌드, 테스트, 병합
  • CD

    • Continuous Delivery
      • 공유 레포지토리로 자동으로 Release
    • Continuous Deployment
      • Production 레벨까지 자동으로 deploy 하는 것
    • 개발자의 변경 사항이 레포지토리를 넘어, 프로덕션(Production) 환경까지 릴리즈 되는 것

CI/CD 프로세스

  1. 작업자가 코드 push
  2. Github Actions에 등록한 workflow 실행
  3. AWS S3에 코드 전달
  4. AWS Code deploy 실행
  5. AWS EC2 배포 완료

횐경

  • Java 8
  • Gradle
  • adoptjdk
  • Spring Boot
  • MariaDB
  • Redis

IAM

IAM은 Identity and Access Management의 약어로 AWS에 서비스 이름이다.
AWS에 등록한 서비스에 접근하기 위해 사용하는 인증 모듈이라고 이해하면 좋을 거 같다.

1. IAM 생성

먼저 IAM을 생성한다. AWS Console에 접속 후 IAM에 들어가서 좌측에 있는 사용자를 클릭 후 사용자 생성 버튼을 클릭한다.


(검은 박스는 직접 사용하려고 만든 것이니 무시해도 좋다.)


다음으로 사용할 이름을 입력하고 다음 버튼 클릭한다.


다음은 권한 설정이다.
해당 사용자가 어떤 권한을 사용할 수 있는지 Rule을 정해준다.

직접 정책 연결을 클릭 하고 AmazonS3FullAccess, AWSCodeDeployFullAccess를 검색창에 검색 후 추가해준다.
추가 되었으면 다음 -> 사용자 생성 버튼을 클릭한다.


생성이 완료되었으면 다음 단계를 진행한다.

2. Key 발급

Github에서 방금 생성한 사용자에 연결할 수 있도록 Key를 발급해서 작성해야 한다.


방금 생성한 사용자 TEST를 클릭한다.



여기서 보안 자격 증명 탭을 클릭 후 스크롤을 내려 액세스 키 만들기 버튼을 클릭한다.


기타 클릭 후 다음 -> 태그 입력 -> 액세스 키 만들기


키가 생성된다.
생성된 키는 다시 확인하지 못하니 csv 파일로 다운로드하거나, 안전한 곳에 적어서 보관하도록 하자.

3. Github에 입력


사용할 Github Repository로 이동 후 아래 프로세스로 진행한다.

  1. Setting
  2. Secrets and variables
  3. New repository secret
    1. Name 입력
    2. Secret에 알맞은 Key 값 입력
    3. Add secret

입력 완료하면 Github에서 나의 AWS에 접근할 수 있다.

4. Role 생성

Service에 접근할 수 있도록 역할을 생성해야 한다.


역할 만들기 버튼을 클릭한다.



위 순서로 진행하고 다른 역할도 하나 만든다.
다른 점은 신뢰할 수 있는 엔터티 선택 에서 다른 AWS 서비스의 사용 사례를 클릭 후 CodeDeploy를 추가해주면 된다.

EC2

1. EC2 생성

AWS EC2를 생성해야 한다.


OS는 가장 익숙한 Ubuntu를 사용, 키 페어는 ssh 접속 시 사용할 키 파일을 위해 미리 생성했고, 네트워크 또한 사용할 port와 허용할 IP에 대해 열어두었다.
중요한 건 네트워크에서 Spring boot App을 실행시킬 port를 열어두어야 외부에서 접속이 가능하다.

EIP 생성 및 연결

EC2 대시보드에서 탄력적 IP 를 클릭한다.




네트워크 경계 그룹은 현재 서울을 Region이 서울이기 때문에 저 값을 입력하고 각자 사용하는 Region에 맞춰 값을 입력해주자.


주의 점은 EIP를 생성하고 EC2 인스턴스에 연결하지 않으면 요금이 청구된다 하니 다시 EC2 대시보드로 이동해서 연결하도록 하자
(현재 나는 이미 연결한 상태라 저렇게 표시되지 연결되지 않으면 다르게 표시된다)

CodeDeploy Agent

ssh를 통해 EC2에 접속해서 Code Agent를 설치하자

sudo apt update
sudo apt install ruby-full
sudo apt install wget
cd /home/ubuntu
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto > /tmp/logfile

위 명령어를 순차적으로 입력해준다.

sudo service codedeploy-agent status

위 명령어를 입력해서 서비스가 실행중인지 확인하자.

ssh에 접속하거나, service 명령어 실행 후 확인하는 방법은

IAM 연결


Code Deploy 세팅

EC2 인스턴스에 코드를 세팅해주도록 Code Deploy를 세팅해주자.




여기서 TEST 클릭



728x90

'BE' 카테고리의 다른 글

Github Actions & AWS를 이용한 CI/CD - 2  (1) 2023.10.25
BE - 웹 프로그래밍 개요  (0) 2021.12.27
Comments