AWS

[AWS] 아키텍쳐 구현(1) : HTTPS 및 로드밸런서 적용

ShinySinee 2024. 8. 9. 17:15

현재 내가 완성시키고자 하는 아키택쳐는 아래와 같다.

사전 준비 상태

1) VPC 생성 완료

2) private subnet 2개, public subnet 2개 ig와 연결 완료

3) kafka용 ec2 설치 완료

4) public 도메인 구매 완료

 

이번 포스팅에서는 Load balancer를 생성하는 과정을 담아보겠다.

 

기본적인 HTTP 프로토콜에 SSL 이라고 하는 인증서를 발급하여 암호화된 서버를 운영할 수 있도록 해준다.

HTTPS/로드밸런서를 합쳐서 운영되는 과정을 간단하게 설명하면,

1) 클라이언트에게서 요청을 받으면  해당 요청을 로드밸런서가 HTTPS(port 443) 요청인지 일반적인 HTTP(port 80) 요청인지 판단한다.

2)  만약 HTTP 요청이면 이 요청을 HTTPS 요청으로 Redirection, HTTPS 요청이면 Target Group의 8080 port로 요청을 포워딩한다.

 

SSL 인증서 발급 및 HTTPS를 로드밸런서에 적용하는 순서는 대략적으로 아래와 같다.

1) Security 그룹 생성

2) ACM(amazon certificate manager) 에서 SSL 인증서 발급 및 호스팅 영역에 레코드 등록 
3) Target group 생성 
4) application load balancer 생성

5) Route 53 등록


1. Security 그룹 생성

로드밸런서 security group은 기본적으로 80포트의 HTTP, 443포트의 HTTPS이 두가지를 설정해주었다.

 

2. ACM(amazon certificate manager) 에서 SSL 인증서 발급 및 호스팅 영역에 레코드 등록

1) Certificate Manager > 인증서 요청 > 퍼블릭 인증서  클릭

요청이 되면 처음에 검증 대기 중인 상태로 나오게 된다.

일련의 다른 과정들을 거치고 일정 시간이 지나야 인증서가 완전히 발급되게 된다.

2)  Route 53에서 레코드 생성 클릭

 

인증서 검증을 위해서 발급된 인증서에 들어가서 " Route 53에서 레코드 생성"을 선택한다.

AWS DNS 서비스로 구매한 도메인이 있다면 자동적으로 레코드가 만들어져있다.

레코드 생성을 눌러준다.

발급된 것을 확인할 수 있다.

3. Target 그룹 생성

대상 그룹은 ECS Fargate Container 이므로 대상 유형을 IP 주소로 설정한다.

여기서 가장 고민했던게 바로 포트 번호이다. 포트 번호는 스프링 부트를 사용할 것이기 때문에 8080으로 해준다. 또한 HTTPS가 아닌 HTTP로 라우팅 한다. 

로드 밸런서는 타겟 그룹에 대해 주기적으로 상태 검사를 수행하는데 정상적으로 응답하는지 여부를 확인하고, 사용 가능한 타겟을 선택하여 트래픽을 분산한다.

해당 경로에 대한 API를 설계하지 않았을 경우 404 Not Found 응답이 발생해서 Unhelthy 상태로 나온다.

IP는 따로 추가 안해주고 포트는 8080으로 지정해준 포트와 일치시켜준다.

4. Application load balancer 생성

1) ec2 > 로드 밸런서 > 로드밸런서 생성 > Application Load Balancer 클릭

내부 로드밸런서가 아닌 인터넷 경계를 선택하여 퍼블릭으로 접근할 수 있게 한다.

public subnet을 선택해준다.

처음에 생성했던 security group을 선택해준다. HTTP와 HTTPS로 요청이 왔을 때 로드밸런서 접근을 허용해준다.

리스너를 통해 ALB는 클라이언트 요청을 받아들이고, 정의된 규칙에 따라 요청을 적절한 대상 그룹으로 라우팅하여 로드 밸런싱 작업을 수행한다.

 

2) 리스너 추가 

 

HTTP로 요청이 들어오면 HTTPS로 리다이렉트하게 리스너를 등록해준다.

 

5. Route 53 등록

Rout 53에 위에서 생성한 로드밸런서를 레코드에 생성한다.

 

이렇게 하면 Load Balancer 생성 및 HTTPS 적용이 완료 된다.


 

다음 포스팅에서는 Load Balancer 와 ECS 생성 및 연결과 github action을 이용한 배포에 대해 써보겠다.👋