AWS CodeDeploy, ELB(L7)을 이용한 무중단 배포 - 1/2

2021년 3월 초기에 작성했던 문서라 현재 AWS 콘솔과는 달라질 수 있다는점 꼭 확인해주세요!

무중단 배포 아키텍처

image

0-1. AWS IAM CodeDeploy 역할설정하기

IAM에서 CodeDeploy Role을 생성합니다.

image

CodeDeploy Role 이름을 지정하고 저장합니다.

0-2. AWS CodeDeploy 설치

원본 인스턴스에서 CodeDeploy를 설치하고 AMI 이미지를 따면 훨씬 편합니다.

Ubuntu 18.04 에서 Directory not empty @ dirs**rmdir 에러

  • CodeDeploy agent는 Ruby로 작동하기 떄문에 ruby 설치는 필수!
  • Ubuntu 18.04 에서는 배포된 파일들을 보관할 폴더가 비어있지 않다면 Directory not empty @ dir_s_rmdir 에러가 발생합니다.
  • ruby 버전이 2.5 이상부터는 ruby 문법 때문에 해당 에러가 발생한다고 합니다. 루비 버전을 꼭 확인!!
sudo apt remove --purge ruby
sudo apt autoremove
sudo apt -y install software-properties-common
sudo apt-add-repository ppa:brightbox/ruby-ng
sudo apt update
sudo apt install -y ruby2.4
ruby --version
ruby 2.4.6p354 (2019-04-01 revision 67394) [x86_64-linux-gnu]

자바추가 설치

# corretto 8 설치
wget -O- <https://apt.corretto.aws/corretto.key> | sudo apt-key add - 
 sudo add-apt-repository 'deb <https://apt.corretto.aws> stable main'

sudo apt-get update
sudo apt-get install -y java-1.8.0-amazon-corretto-jdk

# CodeDeploy 설치 및 실행
cd /home/ubuntu
wget <https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install>
chmod +x ./install
sudo ./install auto

# codeDeploy 확인
sudo service codedeploy-agent status
# 실행
sudo service codedeploy-agent start

1. EC2 AMI 설정하기

image

Auto Scaling을 설정하려면 EC2 AMI가 필요합니다. 먼저 deploy할 EC2를 선택하여 AMI를 생성합니다.

image

image

재부팅 안함을 활성화 하여 원본 인스턴스를 재부팅을 막을 수 있습니다. 만약 선택하지 않으면 인스턴스가 재부팅하여 서버가 꺼지기 때문에 꼭 확인하셔야 합니다.

2. ELB 생성하기

image

2.1 Load Balancer 생성하기

EC2에서 Load Balancer를 생성합니다.

image

Application Load Balancer를 선택하여 HTTP 및 HTTPS 트래픽을 다루는 Load Balancer를 선택합니다.

image

  • 기본 구성

    • 이름: 로드밸런서 이름 지정
    • IP 주소 유형: ipv4로 설정합니다.
  • 리스너: 리스너는 나중에 추가로 설정합니다.
  • 가용 영역

    • VPC: 사용할 VPC 선택
    • 가용 영역: 이 영역에서 public subnet인 subnet을 선택합니다.

image

2단계 스킵합니다.

image

보안 그룹에서 80번을 열고 0.0.0.0/0으로 설정합니다. 필요하면 22 ssh 포트도 열어두셔도 됩니다.

image

4단계 라우팅 구성

대상 그룹

  • 이름: 그룹 이름 지정
  • 대상 유형: 인스턴스로 선택
  • 프로토콜: HTTP, HTTPS 중에 선택하는데 여기선 HTTP 선택
  • 포트: 8080(스프링이라면 8080으로 설정)

상태 검사

  • 프로토콜: HTTP로 설정
  • 경로: / (여기서 Spring프로젝트/resource/static/index.html을 인지하여 연결확인합니다)

    • 또는 다른 컨트롤러 URL로 연결해도 괜찮습니다.

고급 상태 검사 설정

그대로 진행합니다.

2-b.1 ELB HTTPS 설정

ELB 생성하기

1단계: Load Balancer 구성

image

HTTPS 프로토콜을 추가하고 Load Balancer 포트 443을 엽니다.

2단계: 보안 설정 구성

image

ACM 인증서를 선택합니다. ACM이 없다면 ACM을 생성하고 추가합니다.

ACM 설정과 Route 53설정하기

3단계: 보안 그룹 구성

보안 그룹을 설정할 때 HTTPS를 추가하여 443포트도 열어두는 설정을 추가합니다.

4단계: 라우팅 구성

EC2 인스턴스와 ELB간의 통신은 8080으로 할 계획이기때문에 기존과 동일합니다.

5단계: 대상 그룹 설정

대상 그룹을 설정하지 않아도 됩니다. Auto Scaling AMI를 이용할 계획이기 때문에 설정할 필요가 없습니다.

리스너 설정하기

HTTP:80에서 리다이렉션합니다.

image

  • 규칙 보기/편집을 선택합니다.

image

  • 규칙에서 THEN 부분만 설정하면 됩니다. 리디렉션 대상 HTTPS 443으로 설정하고 301 Status Code로 설정하고 저장하면 해당 ELB는 80으로 연결하더라도 자동으로 443으로 이동합니다.

2-b.2 Route 53 ELB 도메인 추가하기

image

  • Route 53에 추가하기위해 DNS 이름을 복사합니다.

image

  • Route 53에 해당 ELB의 DNS를 등록합니다. 레코드 유형은 CNAME으로 설정합니다.

다음은 AWS AutoScaling, Deploy, script를 이용하여 배포해보겠습니다!!


Written by@Sunny Son
개발자는 오늘도 뚠뚠

GitHubFacebook