Wookim

AWS와 github을 이용한 CI/CD 적용하기 (1) 본문

CI_CD

AWS와 github을 이용한 CI/CD 적용하기 (1)

개발자인 경우 2020. 12. 14. 12:20

CI/CD

Continuous Intergration 와 Contonuous Delivery 혹은 Continuous Deployment

지속적 통합과 지속적 배달 혹은 배포

 

www.redhat.com/ko/topics/devops/what-cicd-pipeline

 

CI/CD 파이프라인이란?

CI/CD 파이프라인은 새 버전의 소프트웨어를 제공하기 위해 수행해야 할 일련의 단계입니다.

www.redhat.com

적용 이유

 

현재 본인이 프로젝트를 개발하고 있고 이를 AWS EC2에 올리고 있다고 가정해보자.

 

프로젝트에 필요한 기능들을 새로 개발하고 이를 EC2에 새로 올려야한다.

방법은 여러가지지만 아래와 같은 절차로 진행한다고 가정해보자.

 

개발 > github push > EC2 접속 > git pull > 빌드 (필요에 따라) > 실행 or 도커 빌드 및 컨테이너 실행

 

서비스 하나정도면 버겁지는 않은 절차라 생각되는데...

 

만약 서비스가 여러개라면?....

 

아 생각하기 싫다...

 

자동화 하는 방법은 없을까??

 

 


읽기전에...

선수지식으로 git, github은 자세히 설명하지 않습니다. 

잘 모르신다면 해당 페이지에서 글을 읽는 것을 추천드립니다.

backlog.com/git-tutorial/kr/

 

누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com



하나의 예로 살펴보는 절차

적용할 시스템을 택배 유통시스템에 빗대어 이해해보자

 

소비자 : EC2 서비스

판매자 : 개발자

유통업체 : CI/CD 파이프라인

 

스토리

  1. 소비자가 상품을 주문했다. 
  2. 판매자는 소비자의 주문을 인식하고 상품을 유통업체에 위탁한다.
  3. 유통업체는 제품의 패키징부터 운송 배송을 전부 책임진다.
  4. 소비자는 주문한 상품을 편하게 받고 이를 사용한다.

CI/CD유통업체의 역할을 대신한다고 보면된다.

 


적용 계획

  1. python flask 웹앱 개발 
  2. 개발한 소스 github push
  3. github action -> 자동 빌드 및 테스트 -> AWS S3 배포
  4. AWS S3 -> Code Pipeline -> Code Deploy -> EC2 배포 -> docker build > docker run

 

간략하게 설명하면 위와 같다.


하나 하나 살펴보자

 

  1. 평소 하는 개발 작업이다.
  2. 개발한 소스를 remote repogitory에 적용하는 작업이다.
  3. CI/CD 프로세스가 적용되는 지점이라 생각하면 된다. (소스 빌드 -> S3에 배달)
  4. github에서 S3로 빌드파일을 전달하면 pipline이 이벤트를 감지한다.  pipeline이 deploy를 실행한다.
  5. deploy에서 S3 -> EC2로 빌드파일을 전달한다.

 

github action (포장배달)

github에 특정 이벤트(push, pull request)가 발생했을 때, 명령어를 저장한 파일를 읽고 자동으로 작업을 실행한다. 그 작업으로는 소스 빌드와 테스트등 다양하다. 소스를 빌드하고 AWS S3라는 저장소에 빌드한 파일을 전달까지도 가능하다.

github action은 포장배달이라 생각하면 쉽다.

 

AWS S3 (저장소 혹은 폴더 혹은 택배 허브 창고)

AWS S3는 저장소라고 생각하면된다.
다른 예를 들자면 폴더와 같다고 생각하면된다.                                                                                                     
다른 예로는 택배사의 허브 창고와 같다.

다만 주의할 점은 비용이 부가된다.     

적은 용량 및 적은 상호작용 시 비용은 부담스럽지 않은편.                                                                                        그래도 AWS 서비스들은 비용 관련 글 혹은 도큐먼트를 꼭 읽는것을 습관화 하자. (비용은 본인 책임)

 

AWS CodePipeline (이벤트 핸들러 혹은 관리감독)

코드 파이프라인은 이벤트 핸들러라 생각하면 쉽다. 
github action이 push 나 pull request 이벤트를 감지하는 것처럼
코드 파이프라인은 AWS S3에 파일이 github로 부터 전달 받으면 이벤트를 감지하고 적용한 절차를 실행된다.

코드 파이프라인은 자체 특정 기능이 있기보다는, 다른 서비스들을 실행시키고 지휘하는 역할을 한다.
코드 파이프라인은 이벤트가 감지되면 AWS CodeDeploy에게 명령을 전달한다. 

 

AWS CodeDeploy (빛나는 쿠팡맨 설치기사)

디플로이는 파이프라인에게 실행 명령을 받으면 실행된다.

코드 디플로이는 S3에서 전달받은 파일을 EC2(소비자)에게 배달하는 역할을 수행한다. (배송)
그리고 실행명령을 수행한다. (설치)

 

더 복잡하고 편리한 프로세스를 적용할 수도 있겠지만,

개인프로젝트에 위 과정만 적용되도 개인적으로 만족스럽다.

 

궁금증이 해소되거나 이해에 조금이라도 도움이 되길...

 

다음 글

https://wookim789.tistory.com/40?category=990545

'CI_CD' 카테고리의 다른 글

github action으로 CD하기 (5)  (6) 2020.12.23
github action으로 CD하기 (4)  (0) 2020.12.23
github action으로 CD하기 (3)  (0) 2020.12.23
github action으로 CD하기 (2)  (2) 2020.12.14
Comments