본문 바로가기
IT/AWS

AWS CodePipeline과 S3를 활용한 스프링부트 서비스 배포

by twofootdog 2020. 2. 18.

이번 글에서는 AWS CodePipeline이 무엇인지에 대해 알아보고 AWS CodePipeline과 S3를 활용하여 EC2 인스턴스에 스프링부트 서비스를 배포할 것이다.

글의 순서는 다음과 같다.

 

  1. AWS CodePipeline 이란?
  2. 실습 전 환경 구성
  3. AWS CodePipeline 만들기
  4. AWS CodePipeline 테스트

 

 


 

1. AWS CodePipeline 이란?

AWS CodePipeline은 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위한 CI/CD 서비스로 빌드, 테스트, 배포 서비스를 자동화 할 수 있다. 사용자가 정의한 릴리즈 프로세스 모델에 따라 코드가 변경될 때마다 코드를 빌드, 테스트 및 배포를 수행한다. AWS CodePipeline은 CodeCommit/CodeBuild/CodeDeploy와 같이 프로비저닝 또는 설정할 서버가 필요하지 않다. 

요금은 각 활성 파이프라인 당 월 1USD이며(첫 30일은 무료), 만약 CodeCommit, CodeBuild를 같이 사용하더라도 요금과는 별도로 산정된다. 

 

 

 


 

2. 실습 전 환경 구성

AWS CodePipeline을 실습하기 위해서는 다음과 같은 실습 환경이 구성되어 있어야 한다.

 

  1. AWS CodeCommit 생성 및 로컬PC 스프링부트 프로젝트와 연동(https://twofootdog.tistory.com/33 참고)
  2. AWS CodeBuild 및 S3 버킷 생성(https://twofootdog.tistory.com/37 참고)
  3. AWS CodeDeploy 생성(https://twofootdog.tistory.com/38 참고)
  4. EC2 인스턴스 생성(https://twofootdog.tistory.com/27 참고)

 

 


 

3. AWS CodePipeline 만들기

그럼 이제 AWS CodePipeline을 만들어보도록 하자. 소스 저장소(CodeCommit)와 아티팩트 저장소(S3), 빌드/배포(CodeBuild/CodeDeploy)는 사전에 만들어 놨기 때문에 AWS CodePipeline만 만들어 보도록 하자.

AWS 홈페이지에서 [콘솔에 로그인] -> [CodePipeline] -> [파이프라인 생성] 선택

 

 

파이프라인 설정에서 [파이프라인 이름]을 입력하고, [서비스 역할]은 [새 서비스 역할]을 선택하여 CodePipeline에 맞는 IAM 역할을 자동으로 생성해준다. 그리고 밑에 [고급 설정]을 클릭한다.

 

 

[고급 설정]에서는 아티팩트 저장소를 지정하는데, [기본 위치]를 선택할 경우 새로운 S3 버킷을 자동으로 생성해주며, [사용자 지정 위치]를 선택할 경우 미리 만들어 놓은 버킷을 선택할 수 있다. 이 글에서는 S3 버킷을 이미 만들어 놨기 때문에 [사용자 지정 위치]를 선택한 후 버킷 명을 선태한다. [암호화 키]는 [기본 AWS 관리형 키]를 선택한 후 다음으로 넘어간다.

 

 

[소스 스테이지 추가]에서는 소스 저장소 및 브랜치를 선택하고, 어떤 방식으로 소스 저장소를 감시할 것인지를 선택한다. 각 항목 설명은 다음과 같다.

  • [소스 공급자] : 소스 저장소. 이 글에서는 AWS CodeCommit에서 소스를 관리하므로 AWS CodeCommit을 선택한다.
  • [리포지토리 이름] : 소스 저장소의 이름이다. CodeCommit의 이름을 선택한다.
  • [브랜치 이름] : 어떤 브랜치가 변경이 일어났을 때 배포를 하는지를 선택하는데, master 브랜치에 소스 push가 일어난 경우 배포를 할 것이기 때문에 [master]를 선택한다.
  • [변경 감지 옵션] : [CloudWatch Event]와 [AWS CodePipeline] 이벤트가 있는데 둘 다 소스 변경을 감지하여 자동으로 빌드/배포를 해줄 수 있다. 이 글에서는 [CloudWatch Event]를 선택하고 다음으로 넘어간다.

 

 

[빌드 스테이지 추가]에서는 빌드 공급자에 대한 정보를 입력한다. 이 글에서는 이미 AWS Codebuild를 만들어 놓았기 때문에 만들어놓은 AWS CodeBuild를 선택하고 다음으로 넘어간다.

 

 

[배포 스테이지 추가]에서는 인스턴스에 배포하는 방법에 대한 정보를 입력한다. 이 글에서는 이미 AWS CodeDeploy를 만들어 놓았기 때문에 만들어놓은 AWS CodeDeploy를 선택하고 다음으로 넘어간다.

 

 

[검토]에서는 지금까지 설정해 놓은 정보를 확인한다. 정보가 맞으면 [파이프라인 생성] 버튼을 클릭해서 파이프라인을 생성한다.

 

 

그러면 파이프라인이 생성이 완료되고 자동으로 CodeCommit에 있는 소스가 CodeBuild와 CodeDeploy를 거쳐 소스가 EC2 인스턴스에 배포된다. 

 

 

S3 버킷으로 가보면 파이프라인 명으로 신규 디렉토리가 생성되었고, 해당 디렉토리 안에는 빌드 아티팩트 파일과 소스 아티팩트 파일이 암호화 되어 저장된 것을 확인할 수 있다.

 

 

 

 

 

 

 

 


 

4. AWS CodePipline 테스트

파이프라인 생성을 완료하였으니 이제 테스트를 진행해보자. 로컬PC에 있는 소스를 수정한 후 Git-Bash에서 AWS CodeCommit으로 ADD/COMMIT/PUSH를 실행해보자.

# cd [프로젝트 루트 디렉토리]
# git add .
# git commit -m "[커멘트]"
# git push origin master
Enter passphrase for key '/c/Users/08314/.ssh/codecommit.pem': [RSA 키페어 패스워드]

 

 

소스를 AWS CodeCommit에 Push하게 되면 AWS CodePipeline이 자동으로 실행되게 되고, 소스빌드/배포를 정상적으로 수행한다. 테스트 완료!!

 

 

 


 

참고

https://aws.amazon.com/ko/codepipeline/

 

AWS CodePipeline | 지속적 통합 및 지속적 전달

AWS CodePipeline은 특정한 요구에 맞게 손쉽게 확장할 수 있습니다. 사전 구축된 플러그인 또는 자체 사용자 지정 플러그인을 릴리스 프로세스 중 원하는 단계에 사용할 수 있습니다. 예를 들면 GitHub에서 소스 코드를 가져오거나, 온프레미스 Jenkins 빌드 서버를 사용하거나, 타사 서비스를 사용하여 로드 테스트를 실행하거나, 사용자 지정 운영 대시보드로 배포 정보를 전달할 수 있습니다.

aws.amazon.com

 

 

 

 

 

댓글