IT/Public Cloud

AWS CodeDeploy 사용법 (feat. EC2 배포, 실패 log 확인, 요금)

엘티엘 2021. 12. 7. 18:45

AWS CodeDepoly란?

쉽게 말해, AWS에서 제공하는 배포서비스이다. 이름 그대로 Application 배포를 관리한다. Regional 서비스이므로 Region 단위로 배포 및 Application 관리가 가능하다.

CodeDeploy를 사용해서 EC2에 Application을 배포해보자

대략적인 순서는 아래와 같다.

  1. IAM Role을 생성
  2. S3 버킷 생성, 어플리케이션 및 appspec.yml 업로드
  3. EC2 인스턴스 생성 및 설정
  4. CodeDeploy 항목 생성 (Application, Deployment Group)
  5. 배포 실행

1. IAM  Role 생성

먼저 IAM에서 Role을 만들어야 한다. 아래와 같이 총 2개의 Role을 만들어야 한다.

1) CodeDeploy 에서 사용할 Role

CodeDeploy가 EC2에 배포하기 위해서는 EC2의 현재상태, Tag정보 등을 조회할 수 있어야 한다. 이를 위한 권한을 CodeDeploy에게 주어야 하며, (정확히는 Deployment Group) 이를 위한 Role을 생성하는 단계이다.

IAM -> Roles -> Creat role -> CodeDeploy 선택 -> CodeDeploy -> Next 버튼 선택 -> 완료

2) EC2 에서 사용할 Role

배포가 실행되면 EC2는 S3에서 Application 코드를 다운로드 받아서 설치를 해야 한다. 이를 위한 권한을 EC2에게 주어야 하며, 이를 위한 Role을 생성하는 단계이다.

IAM -> Roles -> Creat role -> EC2 선택 -> AmazonS3ReadOnlyAccess 선택 -> Next 버튼 선택 -> 완료

2. S3 버킷 생성, 어플리케이션 및 appspec.yml 업로드

1) S3 버킷 생성

Application 코드를 업로드할 버킷을 만들어야 한다. 이때 Versioning을 Enable 한다. (Version을 선택해서 배포할수 있기 때문에)

2) 어플리케이션, appspec.yml  업로드

소스코드를 1)에서 생성한 버킷에 업로드해야 한다.

소스코드뿐만 아니라 배포/설치/시작 등을 위한 스크립트와 CodeDeploy에서 사용할 설정파일(appspec.yml)을 같이 업로드 해야 하는데, 아래 주소는 코드 다운로드(WordPress) 및 추가파일(스크립트, appspec.yml) 을 만드는 절차이다.

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/tutorials-wordpress-configure-content.html

아래 2개 커맨드로 S3로 업로드 한다. (CodeDeploy Application 생성 및 코드 업로드)

# CodeDeploy Application 생성 (WordPress_App)
aws deploy create-application --application-name WordPress_App

# S3 버킷에 파일 업로드
aws deploy push \
  --application-name WordPress_App \
  --s3-location s3://codedeploydemobucket/WordPressApp.zip \
  --ignore-hidden-files

3. EC2 생성 및 설정

EC2를 생성하고, Role 추가 및 CodeDeploy Agent를 설치한다.

1) EC2 생성

EC2를 생성한다. 이때 인스턴스 이름을 적절하게 설정한다. (ex. CodeDeployDemo)

2) Role 추가

생성된 EC2 인스턴스 선택 -> Actions -> Security -> Modify IAM role -> 생성한 Role 선택 -> Save

3) CodeDeploy Agent 설치

원래는 CodeDeploy Deployment Group을 생성할때 자동으로 설치되어야 하는데, 내가 할때는 잘 되지 않았다. 이유를 파악하지 못했고 결국 수동으로 Agent를 설치해서 해결했다. (아래 주소 참고)

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

설치 이후 필요에 따라 시작프로그램으로 등록한다.

4. CodeDeploy 설정

원래는 Application과 Deployment Group을 생성해야 한다. 하지만 위에서 Application은 미리 만들어 두었기 때문에(코드 업로드 부분), Deployment Group만 만들면 된다. 

CodeDeploy 선택 -> Applications -> Application 이름(WordPress_App) 선택 -> Create deployment group 선택

  • Service role - 위에서 생성한 Role 입력
  • Environment configuration - EC2 선택 및 Key=Name, Value=인스턴스 이름 입력
  • Enable Load Balancer - 해제
  • Deployment configuration -  OntAtTime 으로 변경

5. 배포 실행

생성된 Deployment Group선택 -> Create deployment -> Revision location 선택 -> Create deployment

아래와 같이 배포가 정상적으로 완료됨을 확인할 수 있다. 

배포가 실패한다면?

아래 명령어로 EC2에서 CodeDeploy Agent 의 로그를 확인할 수 있다.

아예 로그 파일이 없다면 CodeDeploy Agent가 정상적으로 설치 및 실행이 되지 않은것이다. 배포를 실행해도 특별한 로그가 나오지 않는다면, Role이 제대로 할당됬는지 확인해보자.

tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log

CodeDeploy 요금은?

AWS 에 배포하는 요금은 무료이다. (더욱 쓰지 않을 이유가 없다) 다만 온프레미스에 배포할때에 서버당(배포당X, 서버당O) 0.02$이다.

요금 적용 방식: AWS CodeDeploy를 통해 Amazon EC2 인스턴스에 코드를 배포하는 데는 추가 비용이 부과되지 않습니다. 온프레미스 서버에 코드를 배포할 때만 비용이 부과되며 요금은 온프레미스 서버 업데이트당 0.02 USD입니다. 예를 들어 3개의 온프레미스 서버에 배포는 3번의 업데이트에 해당합니다.  

CodeDeploy 사용해야 할까?

auto scaling group 를 대상으로 하는 배포 등 AWS를 대상으로 한 배포에는 확실한 장점이 있다. 게다가 AWS 인스턴스에 배포시에는 무료이고, 별도의 배포 서버를 관리할 필요가 없으므로 AWS에서 개발/운영하는 서비스라면 쓰지 않을 이유는 없을것 같다. 다만 AWS의 의존성이 심해진다는 점. AWS 외부 배포시에는 비용이 발생하기 때문에, 이점은 잘 고려해야 할것 같다.

반응형