Wisdom’s Cloud

[AWS] 34. AWS CodeDeploy 본문

AWS/Beginner

[AWS] 34. AWS CodeDeploy

지혜로운지혜쓰 2022. 4. 1. 13:31

구분 내용
서비스명 AWS CodeDeploy
설명 코드 배포를 자동화하여 애플리케이션 가동 시간 유지
주요 특징 - 효율적으로 서버에 코드 배포
- 높은 확장성 및 신뢰성 제공
- 애플리케이션에 상관 없으며, Windows, Linux, EC2, On-Premise 등 지원
- S3, CodeCommit, CodePipeline, Git, ELB, Auto-Scaling 등과 통합
프리티어(Free Tier) - EC2, Lambda에서 사용하는 경우 추가 비용 없음
- On-Premise에 Agent 설치 사용 시 업데이트당 $0.02 비용 지불

 

 

CodeDeploy의 특징
  • 자동화된 배포
  • 서비스 가동 중지 시간 최소화
  • 배포 서비스에 대한 모니터링
  • 손쉬운 서비스 확장

 

 

CodeDeploy의 In-Place 배포
  • 인플레이스(In-Place) 배포는 배포 그룹 각 인스턴스의 애플리케이션에 대해 중지를 수행하고, 애플리케이션 Revision의 설치를 진행한 후 유효성 검사를 수행하여 이상 유무를 확인한다.
  • 로드 밸런서를 사용하여 배포를 진행하는 경우, 배포 대상인 인스턴스를 로드 밸런스 서비스에서 제외한 후 배포를 수행하며, 테스트를 모두 완료하고 로드밸런스에 대상 인스턴스를 추가하여 서비스를 수행하는 방식이다.
  • 또한 인플레이스 배포는 AWS Lambda에는 적용할 수 없다.

 

 

CodeDeploy의 Blue/Green 배포
  • 블루/그린(Blue-Green) 배포는 애플리케이션을 기존 환경에서 대체 환경으로 트래픽을 라우팅하며, 점진적으로 트래픽을 전환한다.
  • 최종적으로 배포된 서버가 이상이 없다면, 모든 트래픽에 대한 라우팅을 전환하고 기존 환경을 제거함으로써 배포를 완료한다.
  • 블루/그린 배포는 On-Premise와 AWS EC2 / ECS / Lambda 모두를 지원한다.

 

 

CodeDeploy의 App Spec
  • AppSpec 파일은 CodeDeploy가 배포를 관리하기 위해 사용하는 YAML 또는 JSON 형식의 파일이다.
  • EC2/On-Premise에 대한 배포 작업을 수행하는 경우, AppSpec 파일 참조를 통한 배포 Hook 작업을 수행하게 된다.
  • 배포 Hook 작업은 배포 당 한 번 실행되며, 진행 중에 실행될 스크립트를 지정할 수 있다.
  • AppSpec을 활용한 배포 작업은 아래와 같은 프로세스로 수행된다.
  1. Pre-Install: CodeDeploy에서 새로운 배포에 대해 인스턴스에 통보
  2. ApplicationStop: 애플리케이션의 종료 및 설치된 패키지 제거 작업 수행, 로드밸런스 등록 제거 및 서버 중지 작업 수행
  3. Downloadbundle: CodeDeploy Agent가 App Spec 다운로드 후 OS별 임시 폴더에 저장
  4. BeforeInstall: 파일 암호 해독 및 현재 버전 백업 만들기 등 사전 설치 작업 수행, 기존 버전 제거 및 Dependencies 설치
  5. Install: 임시 폴더에 저장된 App Spec을 최종 폴더에 저장
  6. AfterInstall: 애플리케이션 구성 또는 파일 권한 변경 등의 작업 수행
  7. ApplicationStart: 애플리케이션의 시작 및 로드밸런스 등록 작업 수행, 서버 시작 작업 수행
  8. ValidateService: CodeDeploy에 성공적으로 배포 완료 통보

 

 

실습: CodeDeploy를 활용한 EC2 Auto Scaling 그룹에 배포 수행

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

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

 

Step 2 EC2 Auto Scaling 그룹 구성

1. EC2 Auto Scaling 그룹을 구성하기 위해 [서비스] -> [컴퓨팅] -> [EC2] -> [시작 구성]으로 이동하여 [시작 구성 생성] 버튼을 클릭한다.
2. 시작 구성 생성 페이지에서 이름을 입력한 후, AMI와 인스턴스 유형을 선택한다.
3. IAM 인스턴스 프로파일에 이전에 생성한 역할을 선택하고, [고급 세부 정보]를 확장한다.
4. 사용자 데이터 항목에 위와 같이 입력한다. 선택한 리전이 다른 경우 본인의 서비스 리전으로 다운로드 주소를 수정한다.
5. 새 보안 그룹을 생성하여 80번 포트를 허용하는 규칙을 추가한다.
6. 새 키 페어를 생성하여 다운로드한 후, [시작 구성 생성] 버튼을 클릭한다.
7. 생성한 시작 구성을 선택하여 [작업] -> [Auto Scaling 그룹 생성] 버튼을 클릭한다.
8. 시작 템플릿 또는 구성 선택 페이지에서 Auto Scaling 그룹 이름을 입력한 후, [다음] 버튼을 클릭한다.
9. 인스턴스 시작 옵션 선택 페이지에서 VPC와 가용 영역 및 서브넷을 선택한 후, [검토로 이동] 버튼을 클릭한다.
10. 검토 페이지에서 설정한 구성을 확인한 후, [Auto Scaling 그룹 생성] 버튼을 클릭한다.
11. 생성된 Auto Scaling 그룹을 선택하여 인스턴스 관리 탭에서 인스턴스의 상태가 Healthy로 변경되면 다음 스탭을 진행한다.

 

Step 3 Cloud9을 활용한 웹 페이지와 appspec.yml 생성

1. [서비스] -> [개발자 도구] -> [Cloud9]으로 이동하여 [Open IDE] 버튼을 클릭한다. 이전에 생성한 Cloud9 환경이 없다면 [Create environment] 버튼을 클릭하여 신규로 생성한다.
2. codedeploy 폴더를 생성한 후, 사용할 계정의 AWS CLI 설정을 진행하기 위해 AWS Configure 명령어를 실행한다.
3. 생성한 codedeploy 폴더에 index.html 파일을 생성하여 HTML 소스를 작성한다.
4. codedeploy 폴더에 appspec.yml 파일을 생성하여 appspec 정보를 작성하고 저장한 후, scripts 폴더를 생성한다.
5. 생성한 scripts 폴더에 install_dependencies, start_server, stop_server 파일을 생성하고 위와 같이 작성한다.
6. zip 명령어를 실행하여 작성한 파일들을 zip 파일로 압축한다.
7. AWS CLI를 활용하여 압축된 소스 파일을 S3 버킷으로 업로드한다.

 

Step 4 CodeDeploy 구성 및 EC2 Auto Scaling 소스 배포

1. [서비스] -> [개발자 도구] -> [Codedeploy]로 이동하여 [애플리케이션 생성] 버튼을 클릭한다.
2. 애플리케이션 생성 페이지에서 이름을 입력하고, 컴퓨팅 플랫폼으로 [EC2/온프레미스]를 선택한 후, [애플리케이션 생성] 버튼을 클릭한다.
3. 생성된 애플리케이션의 배포 그룹 탭에서 [배포 그룹 생성] 버튼을 클릭한다.
4. 배포 그룹 생성 페이지에서 이름을 입력하고, 이전에 생성한 서비스 역할을 선택한다.
5. 배포 유형으로 [현재 위치]를 선택하고, 환경 구성은 [Amazon EC2 Auto Scaling 그룹]을 선택하여 이전에 생성한 Auto Scaling 그룹을 선택한다.
6. [로드 밸런싱 활성화] 체크박스를 해제하고, 나머지는 항목들은 디폴트로 두어 [배포 그룹 생성] 버튼을 클릭한다.
7. 배포 그룹 생성이 완료되면 [배포 생성] 버튼을 클릭한다.
8. Create deployment 페이지에서 개정 유형을 [애플리케이션을 Amazon S3에 저장]으로 선택하고, 개정 위치는 소스 파일을 업로드한 S3 버킷의 URI를 입력한 후, [배포 만들기] 버튼을 클릭한다.
9. 배포가 진행되며, 배포 상태가 성공으로 표시됨을 확인한다.
10. 배포된 인스턴스의 퍼블릭 IPv4 DNS를 복사하여 웹 브라우저에 입력한다.
11. 웹 페이지가 정상적으로 배포되었음을 확인한다.

 

Step 5 변경된 소스 배포 및 Auto Scaling 그룹 추가 인스턴스에 대한 배포

1. 변경된 소스 배포를 위해 Cloud9 콘솔로 이동하여 index.html 파일에 코드를 추가한다.
2. zip 명령어를 활용하여 소스 파일을 압축한 후, AWS CLI 명령어를 이용하여 S3로 파일을 업로드한다.
3. 다시 CodeDeploy 콘솔로 이동하여 [배포 복사] 버튼을 클릭한다.
4. 개정 위치만 추가로 업로드한 S3 버킷의 URI로 수정한 후, [배포 만들기] 버튼을 클릭한다.
5. 수정되어 정상적으로 배포되었음을 확인한다.
6. 다시 웹 페이지에 접속하면, 수정된 코드가 정상적으로 배포되었음을 확인한다.
7. Auto Scaling의 인스턴스 추가를 위해 EC2 콘솔로 이동하여 Auto Scaling 그룹을 선택한 후, [편집] 버튼을 클릭한다.
8. 원하는 용량, 최소 용량, 최대 용량을 모두 2로 수정한 후, [업데이트] 버튼을 클릭한다.
9. AutoScaling 그룹의 인스턴스 관리 탭에서 수명 주기가 Pending인 인스턴스가 추가되었음을 확인한다.
10. 수명 주기 후크 항목에서 수명 주기 후크를 선택한 후, [작업] -> [편집] 버튼을 클릭한다.
11. 기본 결과를 [CONTINUE]로 변경한 후, [변경 사항 저장] 버튼을 클릭한다.
12. 인스턴스의 수명 주기가 모두 InService로 변경되었음을 확인한다.
13. 다시 CodeDeploy 콘솔로 이동하여 [배포 재시도] 버튼을 클릭한다.
14. 2개의 인스턴스에 대해 소스가 정상적으로 배포되었음을 확인한다.
15. 신규로 생성된 인스턴스의 퍼블릭 IPv4 DNS를 복사하여 웹 브라우저를 통해 정상적으로 웹 페이지가 표시됨을 확인한다.

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

[AWS] 35. AWS CodePipeline  (0) 2022.04.02
[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