본문 바로가기

AWS DevOps/AWS CICD 서비스

AWS CodePipeline

AWS CodePipeline은 빠르고 안정적으로 애플리케이션과 인프라의 업데이터를 위한 릴리스 파이프라인을 자동화할 수 있도록 서비스 형태로 제공되는 완전 관리형 지속적 전달(Continuous Delivery)을 제공하는 서비스

 

AWS CodePipeline은 코드에 변경이 있을 때 마다 사용자가 사전에 정의한 릴리스 모델을 기반으로 애플리케이션의 릴리스 프로세스의 빌드, 테스트, 배포 단계에 걸친 프로세스에 대해 자동화를 수행. 이를 통해 애플리케이션의 변경 사항이나 새로운 기능을 신속하고 안정적으로 제공

 

AWS CodePipeline은 AWS CodeCommit, GitHub, Amazon ECR 또는 Amazon S3에 바로 파이프라인에 대한 소스코드를 가져올 수 있으며 AWS CodeBuild에서 빌드와 단위 테스트를 실행할 수 있다. 

 

또한 AWS Lambda와 통합된 CodePipeline을 사용하여 파이프라인의 어느 단계에서든 코드에서 정의한 사용자 정의함수를 트리거할 수 있으며, 이를 통해 지속적인 전달(Continuous Delivery) 과정에서 필요한 자신만의 커스텀 워크플로우를 구현할 수 있다.

 

구분 내용
서비스명 AWS CodePipeline
설명 빠르고 안정적인 업데이트를 위한 지속적 전달 파이프라인 자동화
주요 특징 - 애플리케이션 및 인프라 업데이트의 릴리스 파이프 라인 자동화
- 완전 관리형 지속적 전달(Continuous Delivery)을 제공하는 서비스
- Delivery & Release의 조율을 위한 커스텀 릴리스 워크플로우 모델링
- 파이프라인을 자동화하며 시각적인 모니터링 수행
- 코드의 변경이 발생하는 경우 빌드, 테스트, 배포를 매번 수행 가능
- AWS 및 3rd Party Tool과의 통합
프리티어
(Free Tier)
- 신규 및 기존 고객에게 매월 무료 활성 파이프라인 1개씩 제공
- 최초 30일 시범적으로 사용할 수 있도록 무료 사용 가능


ㅁ AWS CodePipeline의 주요 기능

 

 ㅇ 첫번째: 지속적인 배포를 위한 워크플로우 모델링

 

 AWS CodePipeline은 소스 배포를 위한 프로세스 워크플로우를 정의하고, 새로운 코드나 기능의 변경이 배포 프로세스에서 진행되는 방법을 모델링 할 수 있다.

 

 CodePipeline은 일련의 단계(빌드, 테스트, 배포)로 구성되며, 워크플로우에 대해 경계를 논리적으로 각각의 단계로 나눌 수 있다.

 각각의 단계는 코드를 빌드하거나, 개발 환경에서 배포하는 등의 시퀀스로 구성되며, AWS CodePipeline에서 제공하는 그래픽 사용자 인터페이스(GUI)를 통해 파이프라인과 해당 파이프라인의 다양한 단계 및 작업을 생성, 구성 및 관리를 수행할 수 있다. 이를 통해 배포 프로세스의 워크플로우를 시각화 및 모델링 수행 가능

 

 ㅇ 두번째: AWS 서비스와의 통합

 

 AWS CodePipeline은 AWS CodeCommit, Amazon S3를 파이프라인에서 사용할 소스로 지정하여 소스코드를 가져올 수 있으며, AWS CodeBuild와 통합하여 단위 테스트를 수행할 수 있다.

 

또한 AWS CodeDeploy, AWS Elastic Beanstalk, Amazon Elastic Container Service(ECS) 또는 AWS Fargate를 사용하여 변경 사항을 배포할 수 있다.

 

CI/CD 프로세스별 AWS 서비스

AWS CloudFormation 템플릿을 이용하여 리소스를 업데이트하거나 삭제할 수 있으며, 이를 통해 AWS Serverless Application Model(AWS SAM)을 사용하여 AWS Lambda, Amazon API Gateway 및 Amazon DynamoDB와 같은 서버리스 애플리케이션에 대해 파이프라인을 적용할 수 있다.

또한 AWS CodePipeline의 어느 단계에서나 코드에서 정의한 사용자 정의함수를 트리거할 수 있다.

 

ㅇ 세번째: 타사 개발자 도구 및 사용자 지점 시스템과의 통합

 

AWS CodePipeline을 사용하면 몇 번의 클릭만으로 GitHub와 Jenkins 같은 타사 개발자 도구를 배포 프로세스에서 원하는 단계에 통합할 수 있다. 이를 통해 소스 제어, 빌드, 테스트, 배포에 타사 도구를 사용할 수 있으며, 기존 자체 정의를 통해 사용중인 서버와 CodePiepline 오픈 소스 에이전트를 통합하여 파이프라인에 서버를 포함하도록 하는 사용자 지정 작업을 등록할 수 있다.

 

CI/CD 프로세스별 3rd Party Tool

 

ㅇ 네번째: 선언형 템플릿과 엑세스 제어

 

AWS CodePipeline은 AWS IAM을 사용하여 누가 릴리스 워크플로우를 변경 및 제어할 수 있는지 관리

 

IAM 사용자, IAM 역할, SAML 통합 디렉터리를 통해 사용자에게 엑세스 권한을 부여하여, 배포 프로세스에 대한 제어를 수행할 수 있다.

 

또한 배포 워크플로 및 해당 단계와 작업을 지정하는 선언형 JSON 문서를 통해 파이프라인 구조를 정의할 수 있다. 

 

이러한 문서는 기존 파이프라인에 대한 수정이 필요한 경우 활용할 수 있으며, 새로운 파이프라인을 생성할 때 코드에 대한 재활용을 통해 보다 손쉽게 파이프라인의 시작을 도울 수 있다.

 

ㅁ AWS CodePipe Line의 기대 효과

 

구분 내용
프로세스 자동화 - 소프트웨어 릴리스 프로세스를 자동화하여 사용자에게 새로운 기능을 신속하게 제공
릴리스 프로세스 시각화 - 소프트웨어 릴리스 프로세스에 대해 다양한 단계를 모델링할 수 있는 그래픽 사용자 인터페이스 제공
완전 관리형 서비스 - 기존. 툴과 시스템에 연결하는 완전 관리형 서비스
- 소프트웨어 릴리스 프로세스를 즉시 시작 가능
- 서버를 설치하거나 프로비저닝할 필요가 없는 완전 관리형 서비스
손쉬운 확장 - 쉽게 확장 가능하며 특정 요구에 맞게 조정 가능
- 릴리스 프로세스의 어느 단계에서든 기존 AWS 플러그인을 사용하거나 자신만의 사용자 지정 플러그인 생성 가능
높은 보안성 - IAM과 통합되어 프로젝트 구축에 세분화된 권한 할당 가능

ㅁ AWS CodePipeline의 구성 요소

 

구분 내용
파이프라인
(Pipeline)
- SW 변경 사항이 배포 프로세스의 적용 방법을 설명하는 워크플로우 구성
- 콘솔에서 파이프라인 생성 시 각 파이프라인 당 S3 버킷에 폴더 생성
- 파이프라인에서 배포 프로세스가 실행되면 각 폴더에 '아티팩트' 저장
- AWS 계정 당 리전 별 300개의 파이프라인 생성 가능
단계
(Stage)
- CodePipeline의 워크플로우를 구분하는 단위로, 수행 '작업' 분류의 기준
- 각 '단계'는 고유한 이름을 가지며, 워크플로우 수행을 위한 '작업' 포함
- 각 '단계'는 전 '단계'가 수행 완료되어야만 다음 '단계'로 넘어갈 수 있음
- '단계'는 하나의 '개정만 처리할 수 있으며, 최소 하나의 '작업' 포함
- '단계'는 파이프라인당 최소 2개에서 최대 10개까지 생성 가능
작업
(Action)
- 파이프라인 실행의 최소 단위로 '단계' 구성 시 정의한 대로 지정된 순서 또는 연속, 병렬로 발생하며, 배포 단계는 하나 이상의 운영 서버에 코드를 배포하는 '배포 작업(Deploy Action)'이 포함될 수 있음
- 모든 작업은 '입력 아티팩트' 또는 '출력 아티팩트' 유형을 가지고 있음
- 단계 당 작업 수는 최소 1개에서 최대 50개
전환
(Transition)
- 워크플로우의 한 단계에서 다음 단계로 이어지는 파이프라인 수행 절차
- CodePipeline 콘솔 내 전환 화살표는 처리 단계에 대한 순서 표기
- 전 단계가 완료되면 기본적으로 다음 단계가 실행되지만, 다음 단계로의 실행을 Disable 할 수 있으며, Disable 해지 전까지 전환 중단
- 파이프라인에 대한 실행 중지를 수행할 수 있는 가장 손쉬운 방법
승인 작업
(Approval Action)
- 권한이 부여될 때까지(예. 공인 IAM 사용자의 수동 승인을 통해) 다음 작업으로 전환되는 것 방지
- 승인 작업 유효 기간: 7일
실패
(Failure)
- '단계'의 '작업'이 성공적으로 완료되지 않고, 파이프라인 실행이 '단계'의 다음 '작업'으로 전환되지 않을 때 발생
- 한 '단계'에 하나 이상의 실패한 작업이 있을 경우 '단계'가 실패하며, 파이프라인 실행은 파이프라인의 다음 '단계'로 전환되지 않음
아티팩트
(Artifacts)
- CodePipeline의 배포를 위한 작업 대상 파일 지칭
- 배포 프로세스 작업의 소스 및 파일 또는 배포 프로세스 작업의 출력물

 

ㅁ AWS CodePipeline의 동작 방식

 

AWS CodePipeline 동작 방식

 ㅇ 첫번째: Request 단계

 

  고객으로부터 기존 프로그램에 대한 변경 요청이나 수정 사항에 대한 요구 사항을 수집하고, 이러한 아이디어 또는 버그 사항에 대한 처리 요청을 받음

 

 ㅇ 두번째: Development 단계

 

  고객의 요청사항에 대해 개발팀에서 버그에 대한 수정과 새로운 아이디어를 반영하여 프로그램에 대한 수정 변경 작업을 진행

 

 ㅇ 세번째: Source 단계

  

  개발자는 프로그램의 변경 사항에 대해 Git, AWS CodeCommit, S3 등 소스 변경을 반영하기 위한 Commit을 수행하거나 업데이트를 수행

 

 ㅇ 네번째: Build 단계

 

   소스에 대한 Commit과 변경이 발생되면 AWS CodePiepline이 자동으로 변경 사항을 감지하고 소스로부터 아티펙트를 읽어와 AWS CodeBuild를 통해 빌드를 수행하고, 테스트 환경에 구성되어 있는 경우 테스트를 수행

 

 ㅇ 다섯번째: Staging 단계

 

 스테이징 환경에서 테스트를 수행하기 위해 빌드된 코드를 스테이징 환경에 배포한 후 부하 테스트나 통합 테스트와 같은 추가 테스트를 수행

 

 ㅇ 여섯번째: Production 단계

 

 모든 테스트가 성공적으로 완료된 후 파이프라인에 추가된 수동 승인 작업(Approval Action)을 통해 승인을 받고 나면 테스트가 완료된 코드를 운영 환경에 배포

 

AWS CodePipeline 실행 Stage

 

'AWS DevOps > AWS CICD 서비스' 카테고리의 다른 글

AWS CodeDeploy  (0) 2021.02.21
AWS CodeBuild  (0) 2021.02.20
AWS CodeCommit  (0) 2021.02.20
CI/CD를 위한 도구들  (0) 2021.02.20
CD(Continuous Delivery/Continuous Deployment) - 지속적인 전달 및 배포  (0) 2021.02.20