본문 바로가기
공부/AWS

[AWS] HTTPS로 서버 배포하기 4편 (ALB와 private EC2 인스턴스 연결)

by 웅대 2023. 5. 30.
728x90
반응형

https://growth-coder.tistory.com/181

 

이전 포스팅에서 Route53에 도메인 설정을 마쳤다.

 

이제 ALB와 private EC2를 연결할 환경이 마련된 것이다.

 

이제 ALB를 통해서 외부 요청을 private subnet에 존재하는 EC2로 보내고 응답을 받아서 외부로 반환해주는 설정을 할 것이다.

 

1. public subnet 생성

ALB가 위치할 public subnet을 생성한다. 외부 요청을 받아야하므로 public subnet에 ALB가 존재해야한다.

 

이전 포스팅과 동일하기 때문에 설명은 생략한다. 

 

참고로 서로 가용 영역이 다른 public subnet 두 개를 생성해야한다.

 

ALB를 생성할 때 최소한 두 개의 가용 영역을 선택해야한다.

 

이전 포스팅에서 가용 영역 ap-northeast-2a에 EC2 인스턴스를 두었는데

 

ap-northeast-2a와 ap-northeast-2b 가용 영역에 각각 public subnet을 생성한다.

 

인터넷 게이트웨이를 연결하는 것을 잊지 말자.

 

물론 우리는 트래픽 분산을 하는 고가용성 구성을 하지는 않을 것이기 때문에 ap-northeast-2b에는 EC2 인스턴스를 생성하지는 않는다.

 

내가 생성한 서브넷 정보.

2. ALB 보안 그룹 생성

ALB의 보안 그룹을 생성한다. 인바운드 규칙은 HTTPS 요청을 추가한다.

ALB 보안 그룹을 생성했다면 EC2로 돌아가서 인바운드 규칙에 ALB의 보안 그룹을 추가해야한다.

3. 타겟 그룹 생성

이 타겟 그룹에 여러 EC2 인스턴스가 들어가고 트래픽이 분산된다.

 

물론 우리는 단일 인스턴스를 사용하기 때문에 트래픽이 분산되지는 않는다.

 

EC2 -> 타겟 그룹 -> 타겟 그룹 생성에 들어간다.

 

Instances를 선택한다.

타겟 그룹의 이름을 지어주고 포트를 설정한다.

 

나는 스프링 부트로 서버를 배포했기 때문에 기본 포트인 8080번 포트를 입력해주었다.

 

헬스 체크 관련 설정이다. 주기적으로 해당 경로로 요청을 보내 동작 상태를 확인한다.

아무 설정도 하지 않으면 "/"경로로 요청을 보내고 상태 코드 200번이 와야 health check에 성공한다.

 

나는 "/"경로로 GET 요청을 보내면 상태 코드 200과 함께 "success" String을 반환하도록 설정을 했기 때문에 그대로 두었다.

 

만약 경로라던가 응답 상태 코드를 변경하고 싶다면 Advanced health check settings를 눌러서 변경하면 된다.

 

이제제 인스턴스들을 추가할 차례이다.

물론 단일 인스턴스이기 때문에 하나만 추가하면 된다.

 

include as pending below를 클릭하여 추가하고 타겟 그룹을 생성한다.

 

4. ALB 생성

EC2 -> 로드 밸런서 -> 로드 밸런서 생성에 들어간다.

 

Application Load Balancer의 설명을 읽으면 알 수 있다싶이 HTTP와 HTTPS 트래픽에 관련된 로드 밸런서이다.

 

이름을 정하고 인터넷 요청을 받아야하므로 internet-facing을 선택한다.

우리의 VPC를 선택해주고 생성한 public subnet 두 개를 선택한다. (서로 다른 가용 영역이어야 한다.)

아까 생성했던 보안 그룹을 선택한다.

이제 리스너를 추가한다. https 리스너만 추가하고 아까 생성했던 타겟 그룹을 선택한다.

그리고 이전 포스팅에서 발급받은 인증서를 연결한다.

ALB를 생성하고 health check에 통과하는지 확인한다.

 

통과한다면 도메인을 연결할 차례이다.

 

Route53 -> 호스팅 영역 -> 우리가 구매한 도메인 -> 레코드 생성으로 이동한다.

 

다음과 같이 별칭을 설정한다.

이제 https://[도메인].store로 접속해보자. success가 뜨면 제대로 된 것이다.

 

정리

  1. ALB는 public subnet에 둔다.
  2. ALB의 보안 그룹은 HTTPS 요청을 허용한다.
  3. EC2 인스턴스의 보안 그룹의 인바운드 규칙에 ALB의 보안 그룹을 허용한다.
  4. 타겟 그룹에는 EC2 인스턴스들이 들어가는데 요청이 들어갈 포트 번호를 지정한다. ex) 스프링 부트의 default 포트번호는 8080
  5. https 요청에 대해 타겟 그룹으로 향하게하는 리스너를 추가한다.
  6. route53에서 레코드 별칭을 설정한다.
728x90
반응형

댓글