DevOps/AWS

[ALB, EC2] NestJS 애플리케이션 AWS에 배포하기 03

kyoulho 2023. 3. 17. 20:43

인프라 구성도

이전에 구성한 서브넷에 NestJS와 NextJS를 위한 오토스케일링 그룹과 ALB를 배포 후 HTTPS를 적용할 계획입니다.

Route53에 도메인이 있어야 진행할 수 있습니다. 생성하는 리소스는 모두 EC2 서비스에서 생성 및 편집할 수 있습니다.

 

 

보안 그룹 생성하기

보안 그룹(Security Group)은 EC2 인스턴스와 RDS, Load Balancer 등 AWS 리소스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 보안 그룹은 인스턴스 또는 서비스마다 적용되며, 각 보안 그룹은 특정 포트, 프로토콜, IP 주소 범위에 대한 규칙을 설정하여 허용되는 트래픽을 제한할 수 있습니다.

 

로드 밸런서용 보안 그룹

인터넷으로부터 오는 HTTP와 HTTPS를 허용해 주었습니다. 보안 그룹은 기본적으로 상태 저장이지만 인, 아웃 모두 설정해 주었습니다.

 

EC2용 보안 그룹

SSH는 제 PC에서만 접속할 수 있습니다.

로드밸런서 생성하기

로드밸런서에는 3가지 종류가 있습니다.

 

Application Load Balancer(ALB)

OSI Layer 7에서 동작하는 로드 밸런서로 HTTP/HTTPS 트래픽에 최적화되어 있습니다. HTTP 헤더 및 쿼리 문자열, URL 경로 등의 정보를 기반으로 트래픽을 분배하며 서버리스 애플리케이션 및 컨테이너 환경에서도 사용 가능합니다.

Network Load Balancer(NLB)

OSI Layer 4에서 동작하는 로드 밸런서로 TCP, UDP, TLS 등 다양한 프로토콜을 지원합니다. 대규모 트래픽을 처리할 수 있으며, 고성능, 저 레이턴시가 필요한 애플리케이션(주로 게임서버)에서 사용합니다.

Classic Load Balancer(CLB)

오래된 버전의 로드 밸런서로 OSI Layer 4와 7에서 동작합니다. HTTP, HTTPS, TCP 등 다양한 프로토콜을 지원하며 단순한 로드 밸런싱 기능만 필요한 경우 사용합니다.

 

ALB를 생성해줍니다. 

VPC와 가용영역을 선택해 줍니다. 가용영역은 기본 2개 이상 선택하게 되어있습니다.

보안 그룹은 아까 생성해 둔 보안 그룹을 선택해주고 리스너는 HTTP와 HTTPS 를 추가해주었습니다. SSL 인증서는 위에서 생성한 인증를 선택합니다. 대상 그룹은 인스턴스를 선택하고 일단 생성만 해둡니다.

 

 

도메인과 로드밸런서 연결

클라이언트가 도메인을 요청 시 DNS가 로드밸런서의 IP를 반환할 수 있도록 설정하겠습니다.

Route 53 → 호스팅 영역 → 도메인 이름 선택 → 레코드 생성을 클릭합니다.

빠른 레코드 생성에서 마법사로 전환합니다.

단순 라우팅을 선택하고 A레코드, Application/Class Load Balancer에 대한 별칭 그리고 사용하는 리전과 로드밸런서를 선택하여 줍니다.

시작 템플릿 생성하기

오토스케일링 그룹을 생성하기 위해서 시작 템플릿을 생성합니다.

기존에 생성한 보안그룹을 선택해줍니다. EBS는 30GB 까지 프리티어라고 합니다.

이전에 생성한 역할을 부여합니다. 고급 설정에서 사용자 데이터의 아래의 코드를 입력해줍니다. 인스턴스가 시작되었을 때 실행될 스크립트입니다.

#!/bin/sh

sudo apt-get update
sudo apt-get install ruby-full wget -y
cd /home/ubuntu
wget http://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto > /tmp/logfile

 

오토스케일링 그룹 생성하기

시작 템플릿, VPC와 서브넷을 선택합니다.

기존 로드 밸런서와 이전에 생성한 대상 그룹을 추가해주세요. 제 이미지의 대상 그룹은 실제로는 Backend-ASG입니다.

 

ACM 인증서 발급받기

로드밸런서에서 HTTPS 요청을 받기 위해서 SSL 인증서를 발급받습니다. 

자신의 도메인을 입력하고 퍼블릭 인증서를 요청합니다.

인증서 나열 탭에서 인증서를 클릭합니다. Route53에서 레코드 생성을 선택하여 도메인에 CNAME 을 추가하여 줍니다.

인증서 검증은 시간이 꽤 소요되니 검증 완료까지 기다려줍니다.

 

 

 

로드밸런서 리스너 설정하기

로드밸런서의 리스너 탭에서 HTTP:80을 선택하고 리스너 편집을 합니다.

기존의 작업을 제거하고 리디렉션을 추가하고 설정해줍니다.

80번 포트로 접근시 443포트로 리다이렉션 시켜주시고 각자의 환경에 맞게 세팅해주세요.

EC2 보안그룹 변경하기

모든 설정이 완료되었다면 EC2 보안 그룹에 인바운드를 로드밸런서로 부터 오는 HTTP, HTTPS로만 한정합니다.

 

모든 설정이 완료 되었다면 EC2에 접근하여 /home/ubuntu 위치에 install 파일이 존재하는지, CodeDeploy Agent가 실행되고 있는지 꼭 확인하세요