본문 바로가기
Programming

CI/CD #4 배포 구성하기 AWS EC2 [최종]

by 개발자 염상진 2022. 12. 29.

 

이전글

2022.12.29 - [Programming] - CI/CD #1 배포 구성하기 Node.js 빌드

2022.12.29 - [Programming] - CI/CD #2 배포 구성하기 Dockerfile

2022.12.29 - [Programming] - CI/CD #3 배포 구성하기 Github Actions

 

 

이번 콘텐츠에서는 CI/CD를 위한 AWS EC2 구성을 알아보겠습니다.

지금 까지 Node.js 서버 프로그램을 작성하고 Dockerfile을 제작하여 이미지를 만들었습니다. 또한 Github Actions workflow를 설정해서 CI/CD 기본을 구성했습니다.

Github Actions에서 구성한 workflow가 실제로 동작하는 환경은 서버 환경입니다. 이 부분을 AWS EC2로 구성하게 됩니다.

 

CI/CD AWS EC2 인스턴스 생성

 

AWS에 접속합니다.

EC2를 검색하고 인스턴스 시작을 클릭합니다.

 

서버 이름을 지정해줍니다.

AMI(Amazon Machine Image)는 Ubuntu/Linux를 선택합니다.

22.04 LTS를 지원하는 우분투 이미지입니다.

프리티어도 가능합니다. 사실 프리티어가 안되더라도 시간당 $0.014기 때문에 크게 금전적으로 부담은 없습니다.

 

 

다음으로 키페어를 생성합니다.

SSH를 사용해 원격접속을 하게 되는데, 이 때 키페어를 사용해 사용자를 인증하게 됩니다.

 

키 페어 이름을 지정하고 RSA 형식의 키페어를 생성합니다.

키 생성을 클릭하면 pem 형식의 파일을 다운로드 하게 됩니다.

⚠️ 주의
이 pem키는 신중하게 보관해야 합니다. 만약 이 키가 노출되면 해커나 코인 채굴용으로 서버가 불법 사용될 수 있습니다.
💡RSA란?
암호 방식 중 하나입니다. 

 

다음으로 보안그룹을 설정해줍니다. 우측 상단에 편집을 클릭합니다.

 

 

 

  • 보안 그룹 이름을 지정해줍니다.
  • 인바운드 보안 그룹은 서버에 접속하는 방화벽(포트)를 지정합니다.
  • HTTP는 80번 포트를 사용합니다.
  • HTTPS는 443 포트를 사용합니다.
  • SSH는 22번 포트를 사용합니다. 특히 SSH로 서버에 접속할 수 있는 IP는 나의 IP만 허용해줍니다.

설정이 완료되면 인스턴스 시작을 클릭해 서버를 생성합니다.

 

 

인스턴스를 선택하고 우측 상단에 연결을 클릭합니다.

 

 

 

SSH 클라이언트를 선택하고 예에 나오는 ssh로 시작하는 명령어를 복사합니다.

 

터미널을 오픈합니다.

pem키가 저장되어 있는 디렉토리로 이동하여 복사한 명령어를 입력합니다.

 

AWS EC2 Docker 설치

 

EC2 인스턴스에 도커 이미지를 실행해야 하므로 Docker를 설치해줍니다.

우선 apt 저장소를 업데이트 해줍니다.

$ sudo apt update -y

 

도커를 설치해줍니다. 다음과 같은 화면이 나오면 그냥 엔터 쳐서 기본값으로 설정해줍니다.

$ sudo apt install docker

 

$ sudo apt install docker.io

 

Reference

AWS EC2 Docker install

공식 문서에 나오는 yum command not found 에러가 계속 발생해서 apt 저장소로 바로 docker를 설치했습니다.

 

설치가 완료되면 정상적으로 설치가 완료되었는지 버전을 확인합니다.

$ sudo docker --version
ubuntu@ip-172-31-0-211:~$ sudo docker  --version
Docker version 20.10.12, build 20.10.12-0ubuntu4

 

Ubuntu에서 Docker를 실행하기 위해서는 sudo 명령어를 붙여줘야 합니다. 하지만 도커 이미지 파일에서 sudo 권한을 얻지 못하기 때문에 sudo 없이 docker 명령을 실행 할 수 있도록 설정을 해줘야 합니다.

$ sudo chmod 666 /var/run/docker.sock

 

 

Github Actions Runner 설치

 

AWS EC2에 Github Actions workflow을 동작시키기 위해서는 EC2 인스턴스에 runner를 설치해줘야 합니다.

Repository > Settings를 선택해서 왼쪽 중간 Actions > Runners를 클릭합니다.

 

 

 

Runner Image는 Linux로 선택합니다.

Download의 명령어를 한줄씩 복사해서 EC2에 설치합니다.

 

설치가 완료되면 아래와 같은 화면이 출력됩니다. 

마지막 run.sh 스크립트 파일을 실행하면 Github Actions job을 기다리고 있습니다.

 

run.sh 파일을 백그라운드로 실행하기 위해서는 명령어 끝에 &를 붙여줍니다.
./run.sh &

 

run.sh 파일이 실행되면 Runners 상태가 Offline에서 Idle로 바뀝니다.

 

CI/CD 테스트

 

CI/CD를 테스팅 하기 위해 node.js 서버 프로그램을 수정합니다.

반환값을 수정하고 add > commit > push 합니다.

 

Trigger로 main 브랜치의 push가 걸려있기 때문에 Actions>로 접속하면 자동으로 build가 진행됩니다.

배포가 완료되면 모두 초록색으로 변하게 됩니다.

 

 

이제 EC2 인스턴스 IPv4로 접속하시면 변경된 반환값을 확인할 수 있습니다.

 

💡 workflow가 정상적으로 넘어가지 않는다면?


만약 build 후 deploy에서 정상적으로 돌아가지 않는다면 docker log를 찍어보고 문제점을 확인할 수 있습니다. 저의 경우 development 환경에서 nodemon을 사용했었는데, EC2에서도 그대로 사용하다 watch 수가 초과되면서 deploy가 안되는 문제가 있었습니다.

$ sudo docker logs <container_id>

 

정리

 

총 4편에 걸쳐 AWS EC2에 Github Actions을 활용해 CI/CD를 구성해보았습니다.

1. 서버 프로그램 작성

2. Dockerfile 작성

3. Github Actions 설정

4. AWS EC2 인스턴스 생성 및 설정

 

위 과정에서는 pipeline에 build와 deploy 2개 밖에 없지만 정상적으로 코드가 작동하는지 Test를 추가할 수도 있고, workflow.yml 파일을 수정해 상황에 맞는 파이프라인을 구성할 수 있습니다.

배포 방식에는 여러가지 방법이 있고, 심지어 CI/CD만 하더라도 AWS CloudDeploy, CloudPipline, Github Actions 등 다양한 방법이 있습니다. 

또한 위에서 알아본 방식은 서버 배포 방식이지만 프론트 엔드의 경우 이거보다 훨씬 간단하게 구성할 수 있습니다. S3 버킷에 번들링된 파일을 업로드하고 AWS CloudFront를 통해 바로 배포해볼 수 있습니다. 

배포에 정답은 없지만 이렇게 CI/CD를 구성해놓으면 이제 Github Repository에서 push만으로 자동으로 배포가 가능하고 체계적이고 지속적인 서비스 운영이 가능해집니다.

혹시 콘텐츠 관련 문의사항 있으시면 댓글로 문의 부탁드립니다 🚀

🚀️ 도움이 되셨다면 구독좋아요 부탁드립니다 👍️

 

Reference

AWS EC2에 CI/CD 구성하기

'Programming' 카테고리의 다른 글

SVG란 무엇인가? CSS 적용하기  (0) 2023.01.03
2022년 회고  (0) 2023.01.02
CI/CD #3 배포 구성하기 Github Actions  (0) 2022.12.29
CI/CD #2 배포 구성하기 Dockerfile  (0) 2022.12.29
CI/CD #1 배포 구성하기 Node.js 빌드  (0) 2022.12.29

댓글