[AWS] CI/CD 직접 구축해보기 #1


AWS EC2에 HTTPS 적용하기 #1 (Express 서버 HTTP로 배포하기)

위 블로그 글(#1~#3편까지)을 따라서 개발한 애플리케이션을 EC2에 띄우고 HTTPS까지 적용해서 배포해보았다.

이번에는 배포를 자동화하여 CD를 구축해보자. 우리는 S3에 빌드된 결과물을 올려놓고, code deploy를 사용해 결과물을 가져와 배포할 수 있도록 해볼 것이다.

위 과정에서 몇 개의 인스턴스를 사용할 것인지 부터 시작해서 어떤식으로 CD를 구성할 지는 모두 본인의 상황에 맞게 조절할 수 있으며 정답이 없다는 것을 먼저 말하고 시작한다.

따라서 블로그 마다 방법이 다 조금씩 다를 것이고 어느 하나를 보고 그대로 따라하기 보다는 몇 개의 블로그를 참고하여 각각 무슨 역할을 하는 것인지를 파악한 뒤에 직접 구성하는 것을 추천한다.

필자가 구축한 CD에서는 어떤 것들이 필요하고 각각 무슨 역할을 하는지 간단하게 정리해본다.

#1 CD 구축을 위한 준비

AWS EC2 인스턴스

배포할 애플리케이션이 떠있는 곳이다.

IAM Role을 생성하여 이 인스턴스에 권한을 부여해 줄 것이다. 이를 통해

AWS IAM Role

AWS IAM User

역할(Role)과 사용자(User)를 생성하여 인스턴스나 AWS 서비스 외부에서 AWS 서비스에 접근할 때 사용할 것이다. (S3 코드 업로드/다운로드, CodeDeploy 실행 등) 아래에서 Role과 User 섹션으로 나누어 설명할 것이다.

AWS CodeDeploy 애플리케이션

아래 github action과 함께 배포 자동화를 도와줄 도구, EC2 인스턴스에서 S3에 올라간 최신 빌드 결과물을 다운받고 의존성을 설치한 뒤에 애플리케이션을 실행시킬 수 있도록 한다.

AWS S3 버킷

빌드된 결과물과 CodeDeploy가 수행해야 하는 스크립트를 저장하는 역할을 수행한다.

#2 Github Action을 활용하여 CD 구축하기

Github Action

레포지토리에서 특정 액션이 일어났을 때 배포를 트리거할 도구, 빌드를 수행하고 빌드된 결과물을 S3에 올리는 역할과 CodeDeploy에게 일하라고 알려준다.

IAM User(인스턴스에 부여하는 role이 아니고 user) 생성이 필요하다. 이 사용자 권한을 통해 S3에 접근하여 파일을 업로드 하고, CodeDeploy를 트리거할 것이다.

appspec.yml

Github action의 workflow 파일과 같이 Code deploy가 언제 어떤 스크립트를 수행해야 하는지를 명시하는 파일이다.

스크린샷 이미지는 한/영 설정 및 업데이트에 따라 조금씩 다를 수 있습니다.

AWS EC2 인스턴스


AWS EC2에 HTTPS 적용하기 #1 (Express 서버 HTTP로 배포하기)

이 부분은 위에 언급했던 블로그에 잘 나와 있어서 여기선 다루지 않겠다.

다만 인스턴스에 태그를 설정해야 추후 CodeDeploy가 인스턴스 식별할 수 있으므로 설정을 해주도록 하자.

태그 설정

  • 인스턴스 클릭 후 하단 정보에서 태그 클릭 > 태그 관리를 통해 쉽게 설정할 수 있다.
  • key-value는 자유롭게 설정하되 이후에 사용할 수 있도록 기억만 해두자.

AWS IAM Role


우선 EC2 인스턴스에 부여할 Role을 생성해보자. 인스턴스에 부여할 권한과 CodeDeploy에서 사용할 권한 총 2개를 생성할 것이다.

AWS의 IAM 서비스로 접속한 뒤 역할(Role) 메뉴로 들어가자.

AWS IAM Role

역할 만들기를 클릭한 뒤 AWS 서비스 선택, 사용 사례는 EC2를 선택한 후 다음을 누르자.

엔터티 설정

S3 버킷에서 빌드된 어플리케이션 코드를 다운받고, Code deploy를 사용할 수 있도록 두 개의 권한에 대해 full access를 주었다.

권한 추가

이름 외에 별도 설정 없이 생성하면 된다.

생성 완료

다음으로는 EC2 인스턴스에 해당 Role을 부여해주어야 한다.

인스턴스에 역할 부여

  • 원하는 인스턴스를 선택하고 상단의 작업 > 보안 > IAM 역할 수정을 클릭한다.

인스턴스에 역할 부여

  • 방금 생성한 Role을 선택한다.

CodeDeploy에서 사용할 Role도 같은 방법으로 만들어주자. 이건 CodeDeployFullAccess만 주면 된다.

IAM User는 Github Action에서 함께 사용할 예정이니 조금 후에 설명하겠다.

AWS CodeDeploy 애플리케이션


애플리케이션과 배포 그룹을 설정할 것이고, 이후 배포 모니터링 시에 활용된다.

CodeDeploy 서비스로 접속한 뒤에 애플리케이션 메뉴로 들어가 애플리케이션을 생성해보자.

코드 디플로이 진입

코드 디플로이 어플리케이션 생성

  • 이름을 적절하게 입력하고 EC2/온프레미스 플랫폼을 선택한 뒤 생성 버튼을 누른다.

이제 애플리케이션에 배포 그룹을 생성하고 위에서 생성한 IAM 권한을 연결해주어야 한다.

권한 연결

  • 애플리케이션 선택 후 세부 정보 보기를 클릭해 위와 같은 화면으로 접속한다.
  • 배포 그룹 생성을 눌러보자.

배포 그룹 생성

  • 이름을 입력하고 서비스 역할에서 아까 생성했던 CodeDeploy용 권한을 선택한다.

배포 유형

  • 이어서 배포 유형은 기본 선택 그대로 현재 위치를 선택 후 환경 구성에서는 EC2 인스턴스를 선택한다.
  • 여기서 key-value에 이전에 우리가 인스턴스에 설정 했던 태그를 입력해준다.

로드 밸런싱은 따로 설정한게 없다면 로드 밸런싱 활성화 체크박스를 해제한 후에 생성 완료하면 된다.

이 배포 그룹을 통해 우리는 추후 배포 현황에 대한 모니터링과 에러 로그를 확인할 수 있게 된다.

세부 정보 보기 클릭 후 쭉 밑으로 내리면 배포 내역을 한 번에 볼 수 있다.

배포 그룹 내역

배포 내역

AWS S3 버킷


이제 빌드 결과물과 각종 스크립트 파일을 업로드할 버킷을 생성해보자.

주황색 버킷 만들기 클릭! 주황색 버킷 만들기 클릭!

이름 설정하고, 리전은 기본 선택 그대로 두었다. 이름 설정하고, 리전은 기본 선택 그대로 두었다.

퍼블릭 엑세스는 차단해두었다 퍼블릭 엑세스는 차단해두었다. (서비스에 외부 이미지 참조가 있다면 부분 허용해주어야 한다.)

  • 여기서 버전 관리 활성화를 해주어야 추후 배포 시 빌드 버전을 선택해 배포할 수 있으므로 꼭 활성화 해주자.
  • 이외에 암호화 설정 등은 모두 기본 설정대로 했다.

버킷 생성 완료

자 이제 빌드된 어플리케이션을 올릴 버킷은 준비되었고, 배포 시에 이 빌드 결과물에 접근하여 다운받을 수 있는 IAM User(계정)를 생성해주도록 하자.

여기까지 해서 CD 구축을 위해 필요한 것들을 1차적으로 준비해봤다.

내용이 너무 길어져서 이후 github action을 통해 배포를 트리거하고 빌드 결과물을 S3에 올리고 실제로 배포가 이루어지는 과정은 다음 포스팅에서 다루도록 하겠다.




# 카테고리