본문 바로가기
AWS 공부

배포 자동화 - CodePipeline

by 돈 되는 정보 공유하기 2022. 6. 17.
반응형

CodePipeline 
Codeipeline은 배포 자동화를 지원한다. 소프트웨어 배포는 여러 단계로 절차가 있는데 지속적 배포(Continuous Integration)와 지속적 통합(Continuous Delivery) 워크플로우와 파이프라인 기법을 통해 배포 자동화를 구현한다. 지속적 통합의 첫 번째 단계로 source stage에서 개발자가 버전 제어 시스템을 통해 repository에 정기적으로 애플리케이션을 업데이트하고 관리하는 방식을 의미한다. 두 번째 단계로 build stage에서는 빌드 시스템이 코드를 컴파일하고 AMI 같은 바이너리 파일 속에 빌드하는 방식을 사용한다. 지속적 통합의 목적은 애플리케이션의 요구 사항에 적합한 코드를 Repository에 제공하도록 하는 것이다. 그렇기 때문에 build stage에서는 애플리케이션을 구성하는 각각의 함수들에 대해 unit tests가 필요하다. 이런 방식을 적용하면 애플리케이션 업데이트 후에 애플리케이션에 문제가 발생했을 경우 개발자는 문제의 원인을 빠르게 파악하고 수정할 수 있다. 그리고 모든 애플리케이션이 build stage가 필요하진 않다. 컴파일하지 않는 애플리케이션을 개발하는 경우 명시적인 build stage를 두지 않을 수 있다. 예를 들어 ASP, PHP 같은 언어의 웹 애플리케이션은 컴파일이 필요하지 않기 때문에 build stage를 거칠 필요는 없다. 지속적 배포란 지속적 통합과 결합하여 애플리케이션을 상용 환경에 배포하는 것이다. 지속적 배포의 목적은 실패의 위험을 줄이고 애플리케이션을 자주 업데이트하는 것이다. 지속적 배포 단계에서는 test stage가 있고 애플리케이션에 따라 작업 내용이 달라진다. 예를 들어 Linux 실행 파일을 테스트하는 경우에는 다양한 Linux 버전이 존재하기 때문에 그만큼 다양한 Linux 버전에서 정상적으로 작동하는지 테스트가 필요하고 웹 애플리케이션을 테스트하는 경우에는 테스트 용도의 웹 서버에 배포가 정상적으로 이뤄지는지 웹 페이지 콘텐츠 검증 등의 테스트 작업이 필요해진다. 마지막으로 deployment stage가 있는데 애플리케이션을 상용 환경에 배포하는 것이다. 지속적 배포의 전체 과정을 자동화하는 것도 가능한데 보통은 애플리케이션을 상용 환경에 배포하기 전에 수동으로 승인하는 과정을 포함하는 것이 일반적이다. 애플리케이션을 배포하기 전에 개발자가 최종적인 검토를 하기 위해서이다. 일정한 주기를 갖고 정기적으로 배포하는 것도 가능하고 애플리케이션을 수정하는 동안 배포를 진행하여 업무 공백을 최소화하는 경우도 있다. 지속적 통합과 지속적 배포 파이프라인은 서로 겹치는 영역이 존재하는데 이를 묶어 지속적 배포/지속적 통합 파이프라인이라고 부른다. 지속적 배포/지속적 통합 파이프라인에는 애플리케이션 개발의 첫 단계인 소스 코드 작성부터 배포에 이르기까지 전체 스테이지를 포함하지만 변경 사항이 존재할 때마다 소스 코드부터 테스트, 배포까지 전체 과정을 개발자가 또 직접 시행할 필요는 없다. CodeDeploy 파이프라인은 2개에서 최대 10개의 스테이지를 이루는데 각각 스테이지별로 하나 이상의 액션을 정의해야 하고 해당 액션에는 Source, Build, Test, Approval, Deploy, Invoke 등 6가지 타입이 존재한다. CodePipeline은 액션 수행을 위해 다른 AWS 서비스와 통합할 수 있고 스테이지마다 최대 20개의 액션을 순차적으로 수행할 수 있다. 이때 병렬적으로 동시에 수행할 수도 있다. Source 액션 타입은 애플리케이션의 파일의 소스를 지정한다. 파이프라인의 첫 번째 스테이지에는 하나 이상의 소스 액션이 포함되어야 하고 사용할 수 있는 제공처는 CodeCommit, S3, GitHub 등이 있다. Build 액션 타입은 모든 애플리케이션에서 사용하는 것은 아닌데 interpreter 언어 같은 컴파일을 하지 않은 언어 기반의 애플리케이션은 사용하지 않아도 무방하나 이런 컴파일을 하지 않아도 되는 언어 기반의 애플리케이션에서 Build 액션을 통해 문법 오류나 스타일 규칙 준수 여부를 분석할 수 있다. Build 액션에는 AWS CodeBuild를 사용할 수 있는데 AWS CodeBuild는 소스 코드 컴파일과 유닛 테스트 수행을 위한 관리형 빌드 서비스로 다양한 프로그래밍 언어를 위한 온디맨드 빌드 환경을 제공한다. Test 액션도 AWS CodeBuild를 사용할 수 있고 Android, IOS, 웹 애플리케이션 서비스를 테스트할 때는 AWS DeviceFarm을 사용할 수 있다. Approval 액션은 수동 승인 작업만 포함된다. 파이프라인 액션 흐름이 Approval 단계에 진입하면 다음 스테이지로 가기 전에 수동 승인될 때까지 대기한다. 7일까지 대기하고 만일 해당 기간 내에 수동 승인되지 않으면 Approval 액션은 거부가 되고 파이프라인 액션 흐름은 중단된다. Deploy 액션에서 배포를 위해 CodePipeline은 CodeDeploy, CloudFormation 등과 통합할 수 있다. CodePipeline은 소스 액션 제공 개체로 CodeCommit을 지정하고 배포 액션 제공 개체로 CodeDeploy를 지정할 수 있다. Invoke 액션은 파이프라인 액션 흐름의 일부로서 커스텀 Lambda 함수 실행이 필요할 때 invoke 액션 타입으로 해당 함수를 호출할 수 있다. 예시로 Invoke 액션을 이용해 EBS snapshot을 생성하고 미사용 리소스를 제거하는 함수를 작성할 수 있다.

반응형

'AWS 공부' 카테고리의 다른 글

AWS SQS(Simple Quere Service)  (0) 2022.06.20
AWS Systems Manager  (0) 2022.06.20
AWS 배포 환경설정  (0) 2022.06.16
AWS 배포 - CodeCommit, CodeDeploy  (0) 2022.06.15
AWS 운영 효율화  (0) 2022.06.14

댓글