개발단계에서 많이 사용 하는 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쿼리가 가능해진다.
'IaaS > 퍼블릭클라우드' 카테고리의 다른 글
(아키텍처) 클라우드 모니터링의 이해 (0) | 2021.10.18 |
---|---|
(아키텍처) 게임을 위한 비동기 웹기반 게임 아키텍처 (0) | 2021.10.09 |
(AWS) EKS를 사용할때 Dashboard를 외부에서 접속하게 하기 (feat. ingress) (0) | 2021.08.19 |
(GCP) GCP 서버 Putty 접속하기 (0) | 2021.08.18 |
(AWS) Amazon EBS/FlashGrid를 이용한 Oracle RAC 구축 가이드 (0) | 2021.08.02 |