만자의 개발일지

[AWS] ALB 경로 기반 라우팅 구현하기 본문

AWS

[AWS] ALB 경로 기반 라우팅 구현하기

박만자 2022. 6. 8. 12:19

이번 포스팅에서는 ALB로 경로 기반 라우팅을 구현하는 법에 대해 알아보도록 하겠습니다.

 

ALB 경로 기반 라우팅 구현하기

ALB로 들어오는 경로에 따라 각각의 경로에 매핑된 타겟 그룹으로 트래픽이 분산될 수 있도록 구현할 것입니다.

 

EC2 인스턴스 생성

경로 기반 라우팅을 테스트 하기 위해 먼저 다른 버전의 EC2 인스턴스를 두개 생성해 주도록합니다.(자세한 생성 과정은 생략하도록 하겠습니다.)

 

각 인스턴스의 보안그룹에는 80번 포트(http)가 열려있어야 하며, 아파치가 설치되있어야 합니다.

아파치는 다음 명령어로 설치하실 수 있습니다. (Amazon Linux 2 기준입니다.)

# 아파치 설치
$ sudo yum install httpd -y

 

첫 번째 인스턴스(AdminServer)에는 다음과 같이 아파치를 구성합니다.

$ sudo mkdir /var/www/html/admin
$ sudo vi /var/www/html/admin/index.html
<body>
	<h1 align="center">Admin Server</h1>
</body>

 

두 번째 인스턴스(UserServer)에는 다음과 같이 아파치를 구성합니다.

$ sudo mkdir /var/www/html/user
$ sudo vi /var/www/html/user/index.html
<body>
	<h1 align="center">User Server</h1>
</body>

 

다음 명령어를 통해 아파치를 시작해줍니다.

$ sudo systemctl start httpd
$ sudo systemctl enable httpd

 

타겟 그룹 생성

EC2 인스턴스를 생성해 주었으니 이제 타겟 그룹을 생성해 주도록 하겠습니다.

두가지 버전의 인스턴스를 각각 다른 타겟 그룹으로 묶어주도록 하겠습니다.

 

타겟 그룹 콘솔로 들어간 후 Create target group 버튼을 눌러 타겟 그룹을 생성 화면으로 넘어가 줍니다.

 

admin 버전의 타겟 그룹부터 만들어 주도록 하겠습니다.

타겟 타입은 인스턴스로 지정해준 후 타겟 그룹명을 지정해 줍니다.

그리고 포트는 80으로 지정해 줍니다.

ces

그다음 VPC를 지정해 준 후 다음과 같이 Health check path를 지정해 줍니다.

하단에 Next 버튼을 눌러 다음 단계로 넘어가 줍니다.

 

admin 버전의 인스턴스를 추가한 후 Create target group 버튼을 눌러 타겟 그룹을 생성해 줍니다.

 

위와 같은 방식으로 user 버전의 타겟 그룹도 생성해 줍니다.

user 버전 타겟 그룹의 Health check path는 /user로 지정해 주면 됩니다.

 

ALB 생성

ALB를 사용하기 위해서는 VPC에 최소 두개 이상의 서로 다른 가용 영역을 가진 서브넷이 있어야 합니다.

이제 ALB를 생성해 줄 차례입니다.

로드 밸런서 콘솔로 들어간 후 Create Load Balancer 버튼을 눌러 로드 밸런서 생성 화면으로 넘어갑니다.

 

그다음 ALB를 선택해 줍니다.

 

ALB 명을 지정해 주신 후 Scheme은 인터넷으로 접속할 것이기 때문에 Internet-facing 으로 지정해 줍니다. 

 

그다음 VPC와 서브넷을 지정해 줍니다. 여기서 지정해주는 서브넷은 서로 다른 가용영역에 위치해 있어야 합니다.

 

그다음 보안 그룹Default 요청에 대한 타겟 그룹을 지정해주어야 합니다.

보안 그룹은 80(http)만 허용해 두었고, 타겟 그룹은 ALB 생성 후에 리스너를 다시 편집할 것이기 때문에 일단 아무거나 지정해 주도록합니다.(admin이든 user든 상관 없습니다.)

 

모든 설정을 마쳤다면 하단에 Create load balancer 버튼을 눌러 ALB를 생성해 줍니다.

 

잘 생성된 것을 보실 수 있습니다.

 

리스너 편집

이제 ALB를 통해 경로 기반 라우팅을 할 수 있도록 리스너를 편집해야 합니다.

위에서 생성한 ALB를 선택한 후 Listeners 탭에서 View/edit rules를 클릭해 줍니다.

 

그다음 다음과 같이 리스너 룰을 편집해 줍니다.

경로 뒤에 애스터리스크(*)를 붙인 이유는 해당 경로로 들어오는 모든 요청을 해당 타겟 그룹으로 보내기 위함입니다.

그 외의 경로로 요청을 보낼 경우 404를 반환하게 됩니다.

 

테스트

이제 테스트를 해보도록 하겠습니다.

 

먼저 ALBDNS/user/ 경로로 접속해보았습니다.

정상적으로 요청이 타겟 그룹으로 전달되는 것을 보실 수 있습니다.

 

그다음 /admin/ 경로로 접속해보았습니다.

역시나 정상적으로 요청이 전달되는 것을 보실 수 있습니다.

 

이번에는 리스너에 정의되지 않은 경로로 요청을 보내보았습니다.

위에서 설정한 리스너 룰에 따르면 /user*/admin*외의 경로는 404를 반환해야 합니다.

정상적으로 404를 반환하는 것을 보실 수 있습니다.

 

이상으로 ALB로 경로 기반 라우팅을 구현하는 법에 대해 알아보았습니다.

'AWS' 카테고리의 다른 글

[AWS] Cognito User Pool 생성하기  (0) 2022.06.10
[AWS] Cognito란  (0) 2022.06.09
[AWS] DynamoDB란  (4) 2022.05.23
[AWS] API Gateway Custom Resource 사용하기  (0) 2022.05.19
[AWS] API Gateway Proxy Resource 사용하기  (0) 2022.05.18
Comments