IaaS/퍼블릭클라우드

(AWS) AWS 클라우드 서비스만으로 서비스Discovery 구현

armyost 2021. 9. 3. 17:05
728x90

개발단계에서 많이 사용 하는 Eureka를 통한 서비스 디스커버리 모델을 AWS로 흉내를 내보면 아래와 같다.

 

가. 역할 별로 EC2를 쪼갠다.(예를들어 Frontend App, Backend App)

└ 그리고 EC2를 여러벌 복제한다. (HA를 위해서)

 

나. 각 App의 EndPoint를 HTTP/HTTPS로 구현

└ 그리고 동일한 EC2 들의 EndPoint를 '대상그룹' 으로 묶는다.

 

다. 각 '대상그룹'에 대한 Application Loadbalancing 적용

 

라. Application Loadbalancing 생성으로 나온 DNS이름을 Route53의 Private DNS를 이용해 어플리케이션에서 사용하기 쉽게 매핑

 


실습을 위해 Nginx로 간단히 웹서버를 올려서 테스트 해보겠다.

 

가. 역할 별로 EC2를 쪼갠다.

[EC2] - [인스턴스] - [인스턴스 시작] 을 통해 Amazon Linux 서버 생성 및 Nginx 설치

실 어플리케이션이라고 가정하고 mid-tier의 VPC내에 생성하도록 한다. 

 

- nginx 설치

$ sudo amazon-linux-extras install nginx1

 

- nginx 컨피그

$ sudo vi /etc/nginx/nginx.conf

에서

server { 
	listen 80; //port 설정 
	server_name frontend.jpkim.co.kr;

 

Endpoint로 사용할 포트번호 그리고 Endpoint에 나중에 매핑하게될 DNS 주소를 입력한다. 

그리고 default로 서비스하는 index.html을 알아볼수 있게 수정한다.

 

 

- nginx 재시작

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

 

위 과정을 반복하여 역핢별로 2개 이상씩 만들어 본다. 

나의 경우 frontend 2개, backend 2개의 EC2를 생성하였다. 

 

 

 

나. 각 App의 EndPoint를 HTTP/HTTPS로 구현

[EC2]-[로드벨런싱]-[대상 그룹]-[Create target group] 에서

 

Choose a target type : Instances

Protocol / Port : 각 어플리케이션에서 Endpoint로 사용하는 port

VPC : mid-tier의 VPC를 선택한다.

Health check path : health check로 호출하는 path를 입력한다. 

 

다음으로 넘어가 동일 역할의 EC2 인스턴스를 선택하고 최종적으로 '대상그룹'생성을 완료한다. 

 

다. 각 '대상그룹'에 대한 Application Loadbalancing 적용

[EC2]-[로드벨런싱]-[로드벨런서]-[LoadBalancer 생성]-[Application Load Balancer]에서

 

Scheme : Internal

VPC : mid-tier의 VPC

Listener : 각 어플리케이션에서 Endpoint로 사용하는 port, Default action에 아까전에 만든 '대상그룹'을 선택한다. 

 

이렇게 로드벨런서를 만들고 나면, 해당 로드벨런서의 DNS이름을 얻을 수 있다. (좀 길다)

 

라. Application Loadbalancing 생성으로 나온 DNS이름을 Route53의 Private DNS를 이용해 어플리케이션에서 사용하기 쉽게 매핑

[Route 53]-[호스팅영역]-[호스팅영역생성]에서

유형 : 프라이빗 호스팅 영역으로 선택하고 만든다.(나의 경우 jpkim.co.kr)

 

만든 호스팅영역에 DNS 레코드를 생성한다.

레코드 이름 : frontend  (이렇게하면 frontend.jpkim.co.kr 을 따는것임)

레코드 유형 : CNAME

값 : Application LoadBalancer에서 획득한 장문의 DNS 주소

 

이렇게 하면 잠시후 어플이케이션들이 frontend.jpkim.co.kr 등 DNS쿼리가 가능해진다.