CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (2)

2025. 3. 18. 21:19AWS

반응형

파이프라인

 

저번 글에서는 수동 배포의 한계와 배포 자동화를 구축하기 위한 AWS CodePipeline에 대해서 간단히 설명했습니다. 이번 글에서는 간단하게 프로젝트를 생성하고, 배포를 위한 EC2, CodePipeline 설정하는 과정을 살펴보겠습니다.

 

1. 프로젝트 준비

먼저 배포할 프로젝트를 준비해야 합니다. 간단하게 NestJS 프로젝트를 생성하고 Github 레포지토리와 연동하겠습니다.

NestJS 프로젝트 생성

NestJS 프로젝트를 CLI를 통해 생성할 수 있습니다. CLI가 없다면 먼저 설치해 주세요.

# CLI 설치
$ pnpm install -g @nestjs/cli

# 프로젝트 생성
$ nest new my-project

 

프로젝트가 생성되었다면, 서버를 실행하고 "Hello World!"가 출력되는지 확인해 보세요. 나중에 배포가 완료된 후, 동일한 API를 호출하여 배포가 정상적으로 이루어졌는지 검증할 예정입니다.

$ cd ./my-project

# 서버 실행
$ pnpm run start:dev

# API 호출
$ curl localhost:3000
Hello World!

 

Github 레포지토리 생성 및 연동

Github에 레포지토리를 생성하고, 프로젝트를 연결합니다.

$ git add .
$ git commit -m "first commit"
$ git remote add origin <REPOSITORY_URL>
$ git branch -M main
$ git push -u origin main

 

2. EC2 생성

프로젝트를 배포할 EC2 인스턴스를 생성합니다. EC2 생성 과정은 “NestJS - EC2에 배포하고 HTTPS 적용하기” 글을 참고해 주세요. 저는 EC2 인스턴스의 이름을 my-project라고 하였습니다.

 

3. CodePipeline 설정

이제 GitHub에서 코드가 변경될 때 EC2에 자동으로 배포되도록, CodePipeline을 생성하여 CI/CD 파이프라인을 구성합니다.

 

AWS 콘솔에서 접속하여 CodePipeline 페이지로 이동합니다. “파이프라인 생성”을 클릭하여 생성 페이지로 이동합니다.

CodePipeline -> 파이프라인 생성

1. 생성 옵션 선택

"Category"는 "사용자 지정 파이프라인 빌드"를 선택하고, 다음으로 넘어갑니다.

 

2. 파이프라인 설정 선택

파이프라인 설정에 대한 자세한 설명은 별도의 글로 정리해두었습니다. 자세한 내용은 여기에서 확인할 수 있습니다. 아래와 같이 설정하고 다음으로 넘어갑니다.

  • 파이프라인 이름 : 원하는 이름을 입력합니다. 저는 "my-project"라고 하겠습니다.
  • 실행 모드 : "대기됨"을 선택합니다.
  • 서비스 역할 : "새 서비스 역할"을 선택하여, CodePipeline용 IAM 역할을 자동으로 생성하도록 합니다.
  • 고급 설정 : 기본값 그대로 사용합니다.

3. 소스 스테이지 추가

소스 스테이지 설정에 대한 자세한 설명은 별도의 글로 정리해두었습니다. 자세한 내용은 여기에서 확인할 수 있습니다. 아래와 같이 설정하고 다음으로 넘어갑니다.

  • 소스 공급자 : “GitHub(GitHub 앱을 통해)”를 선택합니다.
  • 연결 : “GitHub에 연결”을 클릭하여 GitHub과 연결합니다.

소스 스테이지 - 연결

  • “연결 이름”은 원하는 이름을 입력하고 “GitHub에 연결”을 클릭합니다.

Github에 연결

 

  • “새 앱 설치”를 클릭하고, AWS Connector를 설치할 GitHub 계정을 선택합니다.

새 앱 설치
계정 선택

  • AWS에서 접근할 수 있는 레포지토리를 선택합니다. 여기서는 앞서 생성한 프로젝트에만 접근하면 되기 때문에 “Only select repositories”를 통해 앞서 생성한 레포지토리를 선택합니다.

레포지토리 선택

  • 리포지토리 이름 : 위에서 선택한 "my-project" 레포지토리를 선택합니다.
  • 기본 브랜치 : main 브랜치를 선택합니다. 지금은 리포지토리에 main 브랜치만 있기 때문에, main만 표시됩니다.
  • 출력 아티팩트 형식 : "CodePipeline 기본값”을 선택합니다.
  • 스테이지 장애 시 자동 재시도 활성화 : 활성화 합니다.
  • Webhook 이벤트 : CI/CD 자동화를 위해 이 옵션을 활성화합니다.
  • Webhook 이벤트 필터 : 이 글에서는 기본 설정을 사용하므로 별도로 설정하지 않습니다.

4. 빌드 스테이지 추가

빌드 스테이지 설정에 대한 자세한 설명은 별도의 글로 정리해두었습니다. 자세한 내용은 여기에서 확인할 수 있습니다. 아래와 같이 설정하고 다음으로 넘어갑니다.

  • 빌드 공급자 : "기타 빌드 공급자"를 선택하고, "AWS CodeBuild"를 선택합니다.
  • 프로젝트 이름 : 생성되어 있는 CodeBuild를 선택합니다. 없다면 프로젝트 생성을 클릭하여 CodeBuild를 생성합니다.

CodeBuild 생성

  • 프로젝트 구성
    • 프로젝트 이름 : 은 원하는 이름을 입력합니다. 저는 "my-project"로 하겠습니다.
    • Project Type : "Default Project"를 선택합니다.

CodeBuild 생성

  • 환경
    • 환경 유형 : "관리형 이미지"를 선택합니다.
    • Running Mode : "Container"를 선택합니다.
    • 운영 체제 : "Ubuntu"를 선택합니다. (저는 Ubuntu가 익숙해서 Ubuntu를 선택했습니다. Amazon Linux를 선택해도 상관없습니다.)
    • 런타임 : "Standard"를 선택합니다.
    • 이미지 : 최신 버전을 선택합니다. 글을 쓰는 시점에 최신 버전은 "aws/codebuild/standard:7.0" 입니다.
    • 이미지 버전 : "이 런타임 버전에 항상 최신 이미지 사용"을 선택합니다.
    • 서비스 역할 : "새 서비스 역할"을 선택합니다.
    • 역할 이름 : 프로젝트 이름을 입력했다면 자동으로 입력됩니다.
    • 추가 구성 : 기본값 그대로 사용합니다.
  • Buildspec
    • 빌드 사양 : "buildspec 파일 사용"을 선택합니다.
    • Buildspec 이름 : 기본값(buildspec.yml) 그대로 사용합니다.
  • 로그
    • CloudWatch 로그 : 활성화 합니다.
    • S3 로그 : 활성화하지 않습니다.
  • 환경 변수 : 빌드 시 사용할 환경 변수에 대한 설정입니다. 여기서는 사용하지 않기 때문에 넘어가겠습니다.
  • 빌드 유형 : "단일 빌드"를 선택합니다.
  • 입력 아티팩트 : 선택되어 있는 SourceArtifact를 사용합니다.
  • 스테이지 장애 시 자동 재시도 활성화 : 활성화 합니다.

5. 배포 스테이지 추가

배포 스테이지 설정에 대한 자세한 설명은 별도의 글로 정리해두었습니다. 자세한 내용은 여기에서 확인할 수 있습니다. 아래와 같이 설정하고 다음으로 넘어갑니다.

  • 배포 공급자 : "CodeDeploy"를 선택합니다.
  • 애플리케이션 이름 : 생성되어 있는 CodeDeploy를 선택합니다. 없다면 CodeDeploy를 생성합니다. (왜 여기는 프로젝트 생성이 없는지 모르겠습니다...)

CodeDeploy - 애플리케이션 생성

  • CodeDeploy -> 애플리케이션으로 이동하며 "애플리케이션 생성"을 클릭합니다.

CodeDeploy -> 애플리케이션
CodeDeploy -> 애플리케이션

  • 애플리케이션 이름 : 원하는 이름을 입력합니다. 저는 "my-project"로 하겠습니다.
  • 컴퓨팅 플랫폼 : "EC2/온프레미스"를 선택합니다.

CodeDeploy -> 애플리케이션

 

CodeDeploy -> 배포 그룹 생성

  • 생성된 애플리케이션에서 배포 그룹을 생성합니다.

CodeDeploy -> 애플리케이션 -> 배포 그룹

  • 배포 그룹 이름 : 원하는 이름을 입력합니다. 저는 "my-project"로 하겠습니다.
  • 서비스 역할 : IAM 화면으로 이동하여 역할을 생성합니다. 생성한 역할의 ARN을 입력해야 합니다.

IAM -> 역할
IAM -> 역할

  • 신뢰할 수 있는 엔터티 유형 : AWS 서비스를 선택합니다.
  • 사용 사례 : CodeDeploy를 검색하여 선택합니다.
  • 권한 추가 : 별도로 추가할 권한이 없기 때문에 넘어갑니다.
  • 역할 이름 : 원하는 이름을 입력합니다. 저는 "codedeploy-ec2-role"로 하겠습니다.

나머진 변경하지 않고, "역할 생성"을 클릭하여 역할을 생성합니다. 역할이 생성되면 해당 역할의 ARN 복사하여 위의 서비스 역할에 입력합니다.

  • 배포 유형 : "현재 위치"를 선택합니다.
  • 환경 구성 : "Amazon EC2 인스턴스"를 선택합니다. 이어서, 배포할 인스턴스를 특정할 수 있게 태그 그룹을 지정해야 합니다. 키는 "Name"을 선택하고, 값은 앞서 생성한 EC2 인스턴스의 이름을 선택합니다. (앞에서 EC2를 생성하지 않았다면 키와 값이 표시되지 않을 수 있습니다.)
  • 배포 설정 : "CodeDeployDefault.AllAtOnce"를 선택합니다.
  • 로드 밸런서 : 로드 밸런서를 사용할지 여부를 결정하는 옵션입니다. 여기서는 사용하지 않겠습니다.

 

  • 이제 "애플리케이션 이름"과 "배포 그룹"을 위에서 생성한 애플리케이션과 배포 그룹을 선택합니다.
  • 스테이지 장애 시 자동 롤백 구성 : 활성화합니다.

마지막으로 검토 단계에서 설정을 확인한 후 파이프라인을 생성합니다. 파이프라인이 생성되면 즉시 실행됩니다. 하지만, CodeBuild와 CodeDeploy를 위한 설정이 파일이 없기 때문에 처음 실행은 실패하게 됩니다.

 

다음 글에서는 

이번 글에서는 간단한 프로젝트를 생성하고, 배포를 위한 EC2 및 CodePipeline을 설정하는 과정을 설명했습니다. 다음 글에서는 CodeBuild와 CodeDeploy에 필요한 설정 파일을 추가하고, 실제 배포를 진행하겠습니다.

 

2025.03.16 - [AWS] - CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (1)

2025.03.16 - [AWS] - CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (2)

2025.03.17 - [AWS] - AWS CodePipeline 주요 옵션 정리

2025.03.19 - [AWS] - CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (3)

반응형