본문 바로가기

CICD/CodeDeploy

AWS CodeDeploy 테스트

AWS CodeDeploy는 AWS의 배포 서비스

서울 리전에서 사용 가능. 레파지토리는 S3와 github를 사용할 수 있음.

 

이번에는 CodeDeploy와 github를 연동해서 배포 테스트.

 

테스트를 위해 테스트용 EC2 Instance를 생성하고 아래 사전 조건을 구성.

 

1. Agent 설치 및 실행

 

CodeDeploy 에이전트 설치 또는 다시 설치 - AWS CodeDeploy

CodeDeploy 에이전트 설치 또는 다시 설치 CodeDeploy 에이전트가 없거나 작동하지 않는 것으로 의심되는 경우 인스턴스에서 명령을 실행하여 설치 또는 다시 설치할 수 있습니다. javascript가 브라우저에서 비활성화되거나 사용이 불가합니다. AWS 설명서를 사용하려면 Javascript가 활성화되어야 합니다. 지침을 보려면 브라우저의 도움말 페이지를 참조하십시오. © 2019, Amazon Web Services, Inc. 또는 자회사.

docs.aws.amazon.com

 

2. appspec.yml 생성(소스 배포 전후로 스크립트 수행, 예를 들어 아파치 설치->소스 다운->아파치 시작)

 

CodeDeploy AppSpec File 참조 - AWS CodeDeploy

CodeDeploy AppSpec File 참조 이 단원은 참조용입니다. AppSpec file에 대한 개념적 개요는 애플리케이션 사양 파일 단원을 참조하십시오. AppSpec file(application specification file)은 CodeDeploy가 배포를 관리하기 위해 사용하는 YAML 형식의 파일 또는 JSON 형식의 파일입니다. 참고 EC2/온프레미스 배포에 대한 AppSpec file의 이름은 appspec.yml이어야 합니다. A

docs.aws.amazon.com

예시)

version: 0.0 os: linux files: - source: / destination: /var/www/html/

3. Git 레파지토리 구성 및 git commit(index.html, appspec.yml)

4. CodeDeploy Role 생성(Type은 CodeDeploy를 선택하고, AWSCodeDeployRole Policy를 추가)

5. Github가 아닌 S3 사용 시 S3 Access Role 생성(EC2 매핑용)

 

테스트용 EC2 Instance가 준비 되었으면 [AWS Console] > [CodeDeploy] > [Get Started Now] 클릭클릭 

Sample Deployment과 Custom Deployment가 있다. 

 

Sample의 경우 Codedeploy는 cloudfromation을 이용하여 배포할 EC2 Instance를 자동 생성하고, 

 

Custom의 경우 이미 생성되어 있는 EC2 Instance에 배포를 적용한다. 테스트용 EC2 Instance를 생성했으므로 Custom으로 진행한다.

 

Application명과 Group명을 지정한다. Application 하위에 Group을 추가로 생성할 수 있다.

 

Tag, Auto Scaling을 기반으로 배포 설정이 가능하다. Auto Scaling 연동 시 자동적으로 AG Hook을 통해

 

Scale out 되어 새생성되는 EC2 Instance에 자동 배포가 가능하다. 

 

On-Premises 외부 서버도 가능하다.

 

일단 테스트 서버 1대에서 진행한다.

 

Deployment에 대한 설정이다.

 

Deployment configuration은 한 대씩, 전부 다, 절반씩 할 것인지 배포 설정인데 Web이 아니라 API를 통해 자유롭게 설정 가능하다.

 

create-deployment-config — AWS CLI 1.16.269 Command Reference

The destination platform type for the deployment (Lambda , Server , or ECS ). Possible values:

docs.aws.amazon.com

CLI 링크를 통해 75% 씩 배포 설정을 추가 해봤다. 

(헬스체크가 되는 여분의 인스턴스가 없어서 실패되므로 한 번에 배포 선택해야 한다.)

 

그리고 Triggers를 주어서 SNS과 연동하여 필요한 작업을 진행할 수도 있다. Alarm도 된다.

 

롤백 및 ARN을 등록한다.

 

이미 생성한 Role은 아래와 같은 Policy를 갖고 있다.

(Trust Relationships에서 Service Region을 편한대로 선택)

 

이제 다시 [CodeDeploy] >[Deployment Group 선택] > [Action에서 Deploy new revision 선택]

 

이전에 생성한 Application과 Group을 선택한다. 

 

몇 가지는 최초 생성했던 내용인데 또 반복한다. 이상하다... 어쨌든 입력하자.

추가로 GitHub를 선택하고 레파지토리, Commit ID, 배포 방식을 선택하고 배포를 시작한다. 

 

테스트용 EC2 Instance에 접속하면 appspec.yml에 입력한 경로에 코드가 배포 되었다.

 

Auto Scaling Group의 배포를 위해서 유용하게 사용할 수 있다. Auto Scaling Out 되는 EC2 Instance는 최신 버전의 소스가 배포된다.

 

CLI를 통해 자동화 구성도 가능하다. 

로그의 경로는 /var/log/aws/codedeploy-agent/codedeploy-agent.log 이다.

 

배포 중 AccessDeniedException의 경우 IAM 권한 문제이며, poll_host_command의 경우 Agent 버그로 최신 업데이트가 필요한 것으로 보인다. 

 

젠킨스에서도 플러그인을 이용해서 사용할 수 있다!

 

Setting Up the Jenkins Plugin for AWS CodeDeploy | Amazon Web Services

The following is a guest post by Maitreya Ranganath, Solutions Architect. In this post, we’ll show you how to use the Jenkins plugin to automatically deploy your builds with AWS CodeDeploy. We’ll walk through the steps for creating an AWS CodeCommit reposi

aws.amazon.com