IaaS/퍼블릭클라우드

(AWS) CodeDeploy 란?

armyost 2022. 1. 7. 13:22
728x90

기본적인 CodeDeploy 프로세스는 다음과 같다.

 

코드 디플로이 실행을 위해서는 각 EC2(또는 On-Premise) 머신에서 CodeDeploy Agent가 실행중이어야 한다. 

  • Agent는 AWS CodeDeploy에 무엇을 할지 지속적으로 Polling을 수행한다.
  • CodeDeploy는 EC2로 appspec.yml파일을 보낸다.
  • Github이나 S3에서 어플리케이션이 EC2로 Pull된다.
  • EC2는 appspec.yml의 배포 지시를 따라 수행한다.
  • CodeDeploy Agent는 해당 배포에 대한 성공/실패 결과를 보고한다.

 

CodeDeploy 특징은 다음과 같다. 

  • EC2 인스턴스들이 DEV / TEST / PROD 으로 그룹핑되어 관리가 가능하다. 
  • 어떤 배포 방법론도 정의할 수 있다. 
  • CodePipeline이나 artifacts를 사용함으로써 CodeDeploy가 유발되게 할 수 있다. 
  • 어떤 어플리케이션 혹은 Auto-Scaling에서 동작하는 설치 툴을 재사용가능하다
  • AWS Lamdba에 배포를 지원한다
  • CodeDeploy는 리소스를 할당하지는 않는다.

 

CodeDeploy로 기본적인 배포를 수행해보자.

1) Deploy 대상의 EC2를 여러대 만들어 보자. (여러대에 배포를 하면서 Blue/Green, Canary... 등 다양한 방법론을 적용할 수 있다)

2) EC2에 S3에 Read-Only할 수 있는 Access Role을 할당하자

3) EC2의 Tag에 'Environment' 'Development'라고 추가함으로써 배포시 Scope을 사용할 수 있도록 준비하자

 

4) 이제 EC2를 접속해서 CodeDeploy Agent를 설치해야한다. Agent설치방법은 AWS System Manager 설치하는 방법과 CLI를 이용하는 방식이 있다. CLI를 이용하는 방식으로 설명토록 하겠다. 

 

5) EC2 콘솔에서 아래 명령어를 입력하여 Agent를 설치한다. 

$ sudo yum update
$ sudo yum install ruby
$ sudo yum install wget
$ cd /home/ec2-user
$ wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install
$ chmod +x ./install
$ sudo ./install auto
$ sudo service codedeploy-agent status
$ sudo service codedeploy-agent start

자세한 가이드를 원하면 아래를 참고하면 된다.

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

 

Amazon Linux 또는 RHEL용 CodeDeploy 에이전트 설치 - AWS CodeDeploy

네 번째 명령에서 /home/ec2-user는 Amazon Linux 또는 RHEL Amazon EC2 인스턴스의 기본 사용자 이름을 나타냅니다. 사용자 지정 AMI를 사용하여 인스턴스를 만든 경우 AMI 소유자가 다른 기본 사용자 이름을

docs.aws.amazon.com

 

6) [CodeDeploy]-[Application] 메뉴에서 Create Application을 눌러 Application을 정의한다. 

Application name을 입력하고, Compute platform에 EC2/On-Premises를 입력한다. 

 

7) Create Deployment Group을 선택한다. 

Development Group name을 입력하고 Service Role을 만들기 위해 [IAM]-[Roles]을 접속한다. 

 

8) Create Role을 선택하여 아래의 UseCase에서 CodeDeploy를 선택하여 Default구성으로 Role을 생성한다. 

그리고 생성한 Role을 아까전 Development Group 정의시 Service Role에 매핑한다. 

 

9) 배포 방식에서 In-Place, Blue/Green 중에 적절한 것으로 선택한다. 필자는 In-Place를 선택하고자 한다. 

참고로 In-Place는 Deployment Group 구성요소가 업데이트되면서 Offline현상이 발생할 수 있으며, Blue/Green 방식은 새로운 Revision을 모두 추가로 생성한 뒤에 순식간에 커넥션을 전환하여 끊김현상이 없다. 

 

10) Environment Configuration에서 Amazon EC2 Instances를 클릭하고 key란에 EC2생성시 사용한 tag를 사용한다. ('Environment'='Development')

 

11) Deployment Setting 을 OneAtOnce를 선택한다. 로드벨런서 설정을 Enable하거나 Disable하거나 무관하다. 필자는 명시적으로 하기 위해 Disable 하겠다. 이렇게 Development Group생성을 완료하고 다음을 진행한다. 

 

여기서 배포 방법론 3가지에 대해서 설명코자한다. 

AllAtOnce : 모든 인스턴스 배포 시작(위험하므로 개발환경에 권장)

OneAtOnce : 하나씩 배포

HalfAtOnce : 반씩 배포

커스터마이징하게 퍼센트로 정의할 수 도 있다.

 

추가로 Blue/Green 선택시 나오는 Environment Configuration을 설명코자 한다. 

Application이 Deployment 되는 서버를 AutoScaling Group으로 TOBE에는 생성을 하는 방법이 있고

직접 할당했던 EC2 인스턴스와 동일하게 TOBE를 생성하는 방법이 있다. 

 

12) 만든 Development Group상세화면에서 Create Deployment를 클릭한다. 

 

13) 설정창에서 Development group 대상을 방금 생성한 Development Group으로 선택하고, Revision의 위치를 ARN방식으로 입력한다. 이전 포스팅에서 CodeBuild의 결과물을 S3에 저장하였으므로 해당 S3 ARN을 긁어와 입력한다. 이로써 리소스 생성이 완료된다.

 

14) 해당 Development를 수행하여 배포를 시작한다. 끝.

 

추가팁

위 가이드중 5번 항목의 Agent설치 스크립트를 EC2 생성시에 Advanced Details의 User data에 #!/bin예하에 작성하여 이니셜라이징할때 아에 설치 및 실행토록 한다.