dev_eun

[Spring Boot 배포 with AWS ECS] ② AWS 로드 밸런서(Load Balancer) 및 대상 그룹(Target Group) 설정 본문

Cloud/AWS

[Spring Boot 배포 with AWS ECS] ② AWS 로드 밸런서(Load Balancer) 및 대상 그룹(Target Group) 설정

_eun 2024. 1. 30. 14:48

Spring Boot 배포 with AWS ECS 시리즈

1. Dockerfile 작성, Docker 이미지 빌드, ECR 업로드

2. (현재글) AWS 로드 밸런서(Load Balancer) 및 대상 그룹(Target Group) 설정

3. ECS 태스크 정의, 클러스터, 서비스, 태스크 설정

4. 가비아 도메인을 컨테이너로 연결 및 HTTPS 적용

5. Github Action을 통해 CD 구축하기

 

 

안녕하세요.

AWS의 ECS 서비스를 처음 써보면서 삽질을 오래 해서 지친 사람입니다 🫠

저같은 사람들이 한 명쯤 있을까 하여 시리즈를 작성하게 되었습니다. 혹시 잘못된 부분이나 추가하면 좋을 내용 등 피드백이 있다면 코멘트 주시면 감사합니다.

 


 

이 포스트는 아래 요소들이 필요합니다.

1. ECR에 업로드된 이미지 존재

 

 

이전 포스트에서 Docker 이미지를 생성하고 Repository에 push해주었습니다.

 

이 포스트에서는 본격적인 ECS 구성에 앞서,

VPC와 로드 밸런서(Load Balancer), 대상 그룹(Taret Group), 보안 그룹(Security Group)을 설정할 겁니다.

 

각 요소들이 필요한 이유를 먼저 간략하게 설명해보자면,

VPC는 Virtual Private Cloud로, AWS 의 인스턴스들이 논리적으로 격리된 공간입니다. 이 공간 안에서 컨테이너가 실행되어야 해요. 그리고 이 공간은 인터넷 게이트웨이를 보유하고 있습니다. 그래야 외부에서 접근할 수 있으니까요.

 

이 외부에서 접근하는 요청들을 처리하는 곳이 로드 밸런서입니다. 저희는 서버를 실행할 것이니까 Application Load Balancer(ALB)를 생성할 거예요. ALB는 HTTP 혹은 HTTPS 트래픽을 해당 VPC에 속한 여러 대상에 배포합니다.

로드 밸런서에는 여러 리스너를 설정합니다. 이 리스너들은 저희가 설정한 값에 일치하는 요청이 들어오면 수신하여 정해진 규칙에 따라 대상 그룹으로 라우팅해줍니다.

 

대상 그룹은 로드 밸러선의 리스너가 수신한 요청을 받는 대상이에요. 이 시리즈에서는 ECS를 통해 배포한 태스크입니다. 컨테이너라고 생각하시면 돼요. 

 

마지막으로 보안 그룹은 들어오는 요청과 나가는 요청에 대해 제한할 수 있는, 보안을 위해 세팅하는 값들이에요. 어떠한 제한도 없이 모든 곳에서 요청을 받으면 해킹에 더 취약해질 것입니다. 이런 취약점을 보완하기 위해 설정하는 거예요. 어떤 ip 주소에서 어떠한 형태의 요청을 받을 건지 혹은 나가는 요청을 허락할 건지 구성합니다.

 

이제 진짜 설정해봅시다. 

설정할 때는 항상 AWS 콘솔에서 "서울"로 지역이 세팅되어 있는지 확인해주세요.

 

VPC 설정

AWS 콘솔에서 VPC 서비스에 접속해주세요. 계정을 생성하면 기본 VPC가 존재할 것입니다. 저는 이 VPC를 사용할 예정입니다.

혹시 디폴트 VPC가 없으시다면, VPC 생성 버튼을 통해 생성해줍니다.

 

 

Security Group(보안 그룹) 설정

AWS 콘솔에서 EC2 서비스에 접속해주세요. 왼쪽 메뉴에 보안 그룹에 접속해주세요.

"보안 그룹 생성" 버튼을 클릭합니다.

 

지금 생성하는 보안 그룹은 다음에 생성할 로드 밸런서에 대한 보안 그룹입니다. 즉, 서버 API를 사용하는 클라이언트에 관련한 보안 그룹입니다.

 

보안 그룹 이름과 설명은 본인이 알아 볼 수 있도록 작성해주세요. 보안 그룹을 적용할 VPC를 선택해주세요.

인바운드 규칙을 설정해줍니다. 인바운드 규칙은 들어오는 요청에 대한 제약이에요. 저는 서버를 배포할 거고, HTTP 혹은 HTTPS로 접근하게 될 겁니다. 이에 따라서 설정해줄게요.

 

아웃바운드 규칙은 인바운드와 반대로 나가는 요청에 대한 제약입니다. 이건 기본 설정 그대로 두고 생성할게요.

 

 

Target Group(대상 그룹) 설정

AWS 콘솔에서 EC2 서비스에 접속해주세요. 왼쪽 메뉴에 대상 그룹에 접속해주세요.

"대상 그룹 생성" 버튼을 클릭합니다.

 

대상 유형으로 IP 주소를 선택하고, 대상 그룹 이름은 본인이 알아볼 수 있도록 설정해줍니다.

프로토콜과 포트는 각각 HTTP, 80으로 설정해줄게요. VPC는 앞서 생성했던 것 혹은 디폴트로 설정해주세요.

 

상태 검사 섹션에서는 서버가 정상적으로 동작한다는 것을 알 수 있는 값을 설정할 수 있습니다. 

저는 전에 배포 후 태스크가 지속적으로 [실행 - 실행 - 실행 - 실패 - 종료 - 새로운 태스크 실행 - ...] 을 반복했었어요. 그 이유는 이 상태 검사에서 실패했기 때문이었습니다. 이유는 스프링 부트에서 아무런 구현도 하지 않고 초기 상태 그대로 배포해서 접속 시 404로 응답되었기 때문이에요. 저처럼 아무 구현없이 바로 배포하실 경우, 고급 상태 검사 설정의 성공 코드를 404로 변경해주시면 됩니다.

이런 경우가 아니라면 서버가 정상 상태 라는 것을 확인할 수 있는 path와 성공 코드로 설정해주세요. root path에 GET api가 있다면 그대로 두셔도 됩니다.

 

다음으로 넘어가면 대상 그룹 선택하는 페이지가 나옵니다.

아직 설정할 게 없으니 그대로 두고, 바로 "대상 그룹 생성" 해주시면 됩니다.

 

 

Load Balancer(로드 밸런서) 설정

AWS 콘솔에서 EC2 서비스에 접속해주세요. 왼쪽 메뉴에 로드 밸러서에 접속해주세요.

"로드 밸런서 생성" 버튼을 클릭합니다.

 

Application Load Balancer를 생성합니다.

 

 

로드 밸런서 이름을 작성합니다.

 

 

"네트워크 매핑"에서 VPC를 세팅해줍니다. 매핑에서는 서브넷을 선택해줍니다. 저는 가용 영역으로 모든 서브넷을 선택해주었어요. 

 

"보안 그룹"에서 앞서 생성했던 보안 그룹을 설정해줍니다.

 

"리스너 및 라우팅"에서 리스너를 세팅해줍니다. 프로토콜과 포트를 각 HTTP, 80으로 맞춰주세요.

 

그리고 앞서 생성했던 대상 그룹을 선택합니다. 

이렇게 되면 설정한 값에 맞는 요청이 들어오면 이 리스너가 해당 요청을 선택한 대상 그룹으로 라우팅해줍니다.

사진에는 없지만, 이전에 제가 생성했던 그룹인 "ecs-test-target"으로 선택해주었습니다.

 

HTTPS 선택하셨다면, 인증서를 추가로 선택해주어야 합니다.

 

하단의 "로드 밸런서 생성 버튼"을 통해 마쳐주세요.

 

로드 밸런서의 상태가 프로비저닝에서 활성 상태로 변경되면 완료입니다!

 

대상 그룹에서 연결된 로드 밸런서를 확인할 수 있어요.

 

이제 ECS 배포를 위해 미리 설정해야 하는 단계는 모두 끝났습니다!

728x90