Wisdom’s Cloud

[AWS] 35. AWS CodePipeline 본문

AWS/Beginner

[AWS] 35. AWS CodePipeline

지혜로운지혜쓰 2022. 4. 2. 00:12

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

 

 

CodePipeline의 기대 효과
  • 프로세스 자동화
  • 릴리즈 프로세스 시각화
  • 완전 관리형 서비스
  • 손쉬운 확장
  • 높은 보안성

 

 

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

 

 

CodePipeline의 동작 방식
  1. Request: 고객으로부터 기존 프로그램에 대한 변경 요청이나 수정 사항에 대한 요구사항을 수집하고, 이러한 아이디어 또는 버그 사항에 대한 처리 요청을 받는다.
  2. Development: 고객의 요청사항에 대해 개발팀에서 버그에 대한 수정과 새로운 아이디어를 반영하여 프로그램에 대한 수정 변경 작업을 진행한다.
  3. Source: 개발자는 프로그램의 변경 사항에 대해 Git, CodeCommit, S3 등 소스 변경을 반영하기 위한 Commit을 수행하거나 업데이트를 수행한다.
  4. Build: 소스에 대한 Commit과 변경이 발생되면 CodePipeline이 자동으로 변경 사항을 감지하고 소스로부터 아티팩트를 읽어와 CodeBuild를 통해 빌드를 수행하고, 테스트 환경에 구성되어 있는 경우 테스트를 수행한다.
  5. Staging: 스테이징 환경에서 테스트를 수행하기 위해 빌드된 코드를 스테이징 환경에 배포한 후, 부하 테스트나 통합 테스트와 같은 추가 테스트를 수행한다.
  6. Production: 모든 테스트가 성공적으로 완료된 후, 파이프라인에 추가된 수동 승인 작업을 통해 승인을 받고 나면 테스트가 완료된 코드를 운영 환경에 배포한다.

 

 

실습: Cloud9, CodeCommit, CodeDeploy, CodePipeline을 활용한 EC2 소스 배포 자동화

Step 1 서비스 역할 및 IAM 인스턴스 프로파일 생성

1. 콘솔에 로그인한 후, CodeCommit의 Git HTTP 접속을 위한 자격 증명 생성을 위해 AWSCodeCommitFullAccess와 AWSCodePipelineFullAccess 권한을 가진 사용자의 보안 자격 증명 탭으로 이동한다.
2. AWS CodeCommit에 대한 HTTPS Git 자격 증명 항목에서 [자격 증명 생성] 버튼을 클릭하여 다운로드한다.
3. CodeDeploy 서비스를 위한 역할 생성을 위해 [서비스] -> [보안, 자격 증명 및 규정준수] -> [IAM] -> [역할]로 이동하여 [역할 만들기] 버튼을 클릭한다.
4. 신뢰할 수 있는 엔터티 선택 페이지에서 [AWS 서비스]와 [CodeDeploy]를 선택한 후, [다음] 버튼을 클릭한다.
5. 권한 추가 페이지에서 [권한 경계 없이 역할 생성]을 선택한 후, [다음] 버튼을 클릭한다.
6. 이름 지정, 검토 및 생성 페이지에서 역할 이름을 입력한 후, [역할 생성] 버튼을 클릭한다.
7. 생성한 역할이 CodeDeploy에서 제공되는 모든 엔드포인트에 접속하기 위해 신뢰 관계 탭에서 [신뢰 정책 편집] 버튼을 클릭한다.
8. 신뢰 정책 페이지에서 https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-create-service-role.html 링크의 정책으로 수정한 후, [정책 업데이트] 버튼을 클릭한다.
9. EC2 인스턴스에 대한 IAM 프로파일 생성을 위해 [IAM] -> [정책]으로 이동하여 [정책 생성] 버튼을 클릭한다.
10. 정책 생성 페이지에서 https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html 링크의 정책으로 수정한 후, [다음: 태그] 버튼을 클릭한다. (액세스할 버킷을 생성하여 해당 정책의 리소스 항목의 첫 줄에 반영한다.)
11. 정책 이름을 입력하고 [정책 생성] 버튼을 클릭한다.
12. 생성한 정책을 역할로 연결하기 위해 [IAM] -> [역할]로 이동하여 [역할 만들기] 버튼을 클릭한다.
13. 신뢰할 수 있는 엔터티 선택 페이지에서 [AWS 서비스]와 [EC2]를 선택한 후, [다음] 버튼을 클릭한다.
14. 권한 추가 페이지에서 생성한 정책을 선택한 후, [다음] 버튼을 클릭한다.
15. 이름 지정, 검토 및 생성 페이지에서 역할 이름을 입력한 후, [역할 생성] 버튼을 클릭한다.

 

Step 2 Cloud9과 CodeCommit 설정 및 소스 등록

1. [서비스] -> [개발자 도구] -> [Cloud9]으로 이동하여 [Open IDE] 버튼을 클릭한다. 이전에 생성한 Cloud9 환경이 없다면 [Create environment] 버튼을 클릭하여 신규로 생성한다.
2. Cloud9 콘솔에서 AWS CLI 설정을 진행하기 위해 AWS Configure 명령을 실행한다.
3. git config를 실행하여 AWS 자격 증명 프로필로 Git 자격 증명 헬퍼 사용을 지정하고, Git 자격 증명 헬퍼가 경로를 리포지토리로 전송할 수 있도록 한다.
4. 리포지토리 생성을 위해 CodeCommit 콘솔로 이동하여 [리포지토리 생성] 버튼을 클릭한다.
5. 리포지토리 생성 페이지에서 이름을 입력한 후, [생성] 버튼을 클릭한다.
6. 리포지토리가 생성되면 [URL 복제] -> [HTTPS 복제] 버튼을 눌러 Git URL을 복사한다.
7. git clone 명령과 함께 복사된 Git URL을 추가하여 CodeCommit의 리포지토리를 clone한다.
8. 복제된 codepipeline-repo 폴더에 index.html 파일을 생성하여 HTML 소스를 작성한다.
9. codepipeline-repo 폴더에 appspec.yml 파일을 생성하여 appspec 정보를 작성하고 저장한 후, scripts 폴더를 생성한다.
10. 생성한 scripts 폴더에 install_dependencies, start_server, stop_server 파일을 생성하고 위와 같이 작성한다.
11. 작성한 소스 파일들을 CodeCommit으로 전송한다.
12. 다시 CodeCommit 콘솔로 이동하여 소스 파일들이 정상적으로 전송됨을 확인한다.

 

Step 3 EC2 및 CodeDeploy 배포 그룹 생성

1. EC2 인스턴스 생성을 위해 EC2 콘솔로 이동하여 [인스턴스 시작] 버튼을 클릭한다.
2. AMI 선택 페이지에서 Amazon Linux 2 AMI의 [선택] 버튼을 클릭한다.
3. 인스턴스 유형 선택 페이지에서 t2.micro를 선택한 후, [다음: 인스턴스 세부 정보 구성] 버튼을 클릭한다.
4. 인스턴스 세부 정보 구성 페이지에서 네트워크와 서브넷을 선택한 후, IAM 역할을 이전에 생성한 인스턴스 프로파일 역할로 선택한다.
5. 사용자 데이터에 위와 같이 내용을 입력한 후, [다음: 스토리지 추가] 버튼을 클릭한다. 선택한 리전이 다른 경우 본인의 서비스 리전으로 다운로드 주소를 수정한다.
6. 스토리지 추가 페이지에서는 디폴트로 두고 [다음: 태그 추가] 버튼을 클릭한다.
7. 태그 추가 페이지에서 키와 값을 입력한 후, [다음: 보안 그룹 구성] 버튼을 클릭한다.
8. 보안 그룹 구성 페이지에서 새 보안 그룹을 생성하여 80번 포트를 허용하는 규칙을 추가한 후, [검토 및 시작] 버튼을 클릭한다.
9. 새 키 페어를 생성하여 다운로드한 후, [인스턴스 시작] 버튼을 클릭한다.
10. CodeDeploy 배포 그룹 생성을 위해 CodeDeploy 콘솔로 이동하여 [애플리케이션 생성] 버튼을 클릭한다.
11. 애플리케이션 생성 페이지에서 이름을 입력하고, 컴퓨팅 플랫폼으로 [EC2/온프레미스]를 선택한 후, [애플리케이션 생성] 버튼을 클릭한다.
12. 생성된 애플리케이션의 배포 그룹 탭에서 [배포 그룹 생성] 버튼을 클릭한다.
13. 배포 그룹 생성 페이지에서 이름을 입력하고, 이전에 생성한 서비스 역할을 선택한다.
14. 배포 유형으로 [현재 위치]를 선택하고, 환경 구성은 [Amazon EC2 인스턴스]를 선택하여 이전에 생성한 인스턴스의 태그를 입력한다.
15. [로드 밸런싱 활성화] 체크박스를 해제하고, 나머지는 항목들은 디폴트로 두어 [배포 그룹 생성] 버튼을 클릭한다.

 

Step 4 CodePipeline과 CodeDeploy 배포를 활용한 배포 파이프라인 구현

1. 파이프라인 생성을 위해 CodePipeline 콘솔로 이동하여 [파이프라인 생성] 버튼을 클릭한다.
2. 파이프라인 설정 선택 페이지에서 이름을 입력하고, [새 서비스 역할]을 선택한다.
3. [사용자 지정 위치]를 선택하여 액세스할 버킷을 선택한 후, [다음] 버튼을 클릭한다.
4. 소스 스테이지 추가 페이지에서 생성한 리포지토리를 선택한 후, [다음] 버튼을 클릭한다.
5. 빌드 스테이지 추가 페이지에서는 [빌드 스테이지 건더뛰기] 버튼을 클릭한다.
6. 배포 스테이지 추가 페이지에서 생성한 배포 그룹을 선택한 후, [다음] 버튼을 클릭한다.
7. 검토 페이지에서 설정한 구성을 확인한 후, [파이프라인 생성] 버튼을 클릭한다.
8. 파이프라인이 정상적으로 등록되고 단계별로 작업 수행을 완료하면, 위와 같이 완료 메시지가 출력된다.
9. 배포된 인스턴스의 퍼블릭 IPv4 DNS를 복사하여 웹 브라우저에 입력한다.
10. 웹 페이지가 정상적으로 배포되었음을 확인한다.
11. 변경된 소스의 자동 반영 여부를 확인하기 위해 Cloud9 콘솔로 이동하여 index.html 파일에 코드를 추가한다.
12. 변경된 소스 파일을 CodeCommit으로 전송한다.
13. CodePipeline 콘솔로 이동하면, 위와 같이 코드가 자동으로 배포된 것을 확인할 수 있다.
14. 자동 배포 완료 후 웹 브라우저에 다시 접속하면, 변경된 HTML 코드가 정상적으로 반영되었음을 확인할 수 있다.

'AWS > Beginner' 카테고리의 다른 글

[AWS] 34. AWS CodeDeploy  (0) 2022.04.01
[AWS] 33. AWS CodeBuild  (0) 2022.03.30
[AWS] 32. AWS CodeCommit  (0) 2022.03.29
[AWS] 31. AWS Cloud9  (0) 2022.03.27
[AWS] 30. 클라우드 용어 정리(12)  (0) 2022.03.27