AWS CodeDeploy는 AWS의 배포 서비스
서울 리전에서 사용 가능. 레파지토리는 S3와 github를 사용할 수 있음.
이번에는 CodeDeploy와 github를 연동해서 배포 테스트.
테스트를 위해 테스트용 EC2 Instance를 생성하고 아래 사전 조건을 구성.
1. Agent 설치 및 실행
2. appspec.yml 생성(소스 배포 전후로 스크립트 수행, 예를 들어 아파치 설치->소스 다운->아파치 시작)
예시)
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를 통해 자유롭게 설정 가능하다.
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 버그로 최신 업데이트가 필요한 것으로 보인다.
젠킨스에서도 플러그인을 이용해서 사용할 수 있다!