본문 바로가기

AWS

[CICD] Terraform을 통한 AWS 3 Tier 구성 및 CI/CD 파이프라인 배포 #5 - CodeDeploy를 통한 ASG Blue-Green 배포

반응형

#4에서 S3로 zip 파일이 업로도된 것을 확인하였다.

 

CodeDeploy를 통한 war 파일 배포

Tomcat Server에서 S3에 있는 파일을 가져오기 위해 IAM Instance Profile이 해당 WAS EC2에 Attach되어 있어야 한다.

 

아래의 EC2 Metadata로 잘 붙어있는지 확인할 수 있다.

 

- CodeDeploy Agent 설치

 

 

#!/bin/bash

sudo yum -y install ruby
sudo yum -y install wget
cd /home/ec2-user
sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install

sudo chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent start
sudo service codedeploy-agent status

 

- 설치 완료

 

CodeDeploy 배포 작업

아래 3단계 작업이 수행될 것이다.

1. Application 생성

2. Deployment Group 생성

3. Deploy 수행

 

 

1. Application 생성

 

- Compute Platform은 EC2/On Premises로 해준다.

 

2. Deployment Group 생성

- 기 생성한 CodeDeploy IAM Role을 Attach한다.

- In Place : Service를 잠시 중단 후 최신 Application Revision으로 업데이트를 진행하며 (서비스 잠시 중단 발생)

- Blue/Green : 기존 ASG와 동일한 ASG를 신규로 하나 생성 후 서비스를 올려 정상 작동할 경우 Traffic을 신규 ASG로 한번에 변경하는 타입이다. (서비스 순단 거의 없음)

 

Terminate the Original Instances in the deployment group

⇒ 기존 ASG 삭제하겠음을 의미한다.

 

Deployment

Jenkins를 통한 CI 작업에서 빌드된 war 파일, appspec.yml 파일 및 쉘 스크립트 파일이 묶여 있는 zip 파일의 위치를 Revision Location에 기입해준다.

 

그 외, 나머지 정보들은 Demployment Group에서 기입한대로 Blue/Green, EC2 .. 기입되어 있다.

 

배포 중 중간에 문제 발생

현재 demo 경로로 접근 결과 아무것도 없음을 확인할 수 있다.

 

권한이 잘 적용 안된듯 하다.

 

CodeDeploy Assume Role이 s3.~~ 였다. 임시 Token 값을 받기 위해 ec2 엔드포인트로 가야 하는데 이에 대한 권한이 없었기 때문에 실패.. (Terraform Code 잘못 작성했음)

 

 

수정 후 S3 Bucket 조회 잘 되는 모습...

결과

Blue Green에는 총 4단계가 있는 것으로 보인다.

  1. Replacement 인스턴스 배포 (똑같은 ASG를 만듬)
  2. Replacement 인스턴스에 애플리케이션을 설치
  3. Replacement 인스턴스에 트래픽 라우팅
  4. 기존 ASG 삭제

 

- Auto Scaling Group

 

- Code Deploy 블루 그린 업데이트 완료

 

- 배포 완료

 

- ASG

기존의 ASG는 삭제되고 Blue-Green 배포로 인해 생성된 ASG가 잔존하였다.

 

 

정리

Code Deploy로 배포를 자동화하는 것 까지 마무리하였다.

더 나아가 Jenkins와 CodeDeploy Plugin을 통해 Git에서 Event가 발생 시 CI/CD 파이프라인 자동화를 구성할 수 있을 것으로 보인다.

 

각 과정 간에 어떻게 인증, 인가를 할 것인지 잘 고민해봐야 하며 직접 수동으로 배포 과정을 진행해보고 하나씩 스크립트를 구현해가는 것이 Error를 줄일 수 있으며, 중간 중간에 자동화 스크립트를 만들며 진행하는 것이 좋을 것으로 보인다.

 

또한 Error가 발생할 경우 직접 EC2에 접속하여 /var/log/ 경로에 있는 jenkins.log를 확인해보거나 codedeploy log를 확인하는 등 여러가지 트러블 슈팅 방법이 있을 수 있다. 혹은 Jenkins 웹 페이지의 Console Log를 통해서도 어떤 문제가 있는지 파악할 수 있다.

 

 

 

 

Ref

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

 

반응형