이두잉의 AWS 세상

AWS CodeDeploy 테스트

2017.01.06 22:08 - leedoing leedoing

AWS CodeDeploy는 AWS의 배포 서비스입니다. 

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


이번에는 CodeDeploy와 github를 연동해서 배포하도록 합니다.


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

1. Agent 설치 및 실행(http://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/how-to-run-agent-install.html)

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

참고: http://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/app-spec-ref.html)

예시)

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를 통해 자유롭게 설정 가능합니다.

(http://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-config.html)

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를 통해 자동화 구성도 가능합니다. (참고: http://docs.amazonaws.cn/cli/latest/reference/deploy/index.html)

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


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


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

https://aws.amazon.com/ko/blogs/devops/setting-up-the-jenkins-plugin-for-aws-codedeploy/

시간되면 블로깅 하겠습니다.


감사합니다.




'CICD > CodeDeploy' 카테고리의 다른 글

AWS CodeDeploy 테스트  (0) 2017.01.06