이번 글에서는 AWS ELB(Elastic Load Balancing)을 생성한 후 EC2 인스턴스와 연결한 뒤 외부 도메인을 연동하는 법에 대해 알아볼 것이다. 글의 순서는 다음과 같다.
- ELB에 대한 설명
- ELB 생성 후 EC2 인스턴스와 연결
- ELB에 외부도메인 연동
1. ELB(Elastic Load Balancing)이란?
ELB(Elastic Load Balancing)란 여러 가용 영역에서 수신되는 애플리케이션 트래픽을 여러 EC2 인스턴스 및 리소스로 분산시켜서 부하를 분산시켜주는 서비스다. ELB는 L4(전송계층, TCP/UDP 등)나 L7(애플리케이션 계층, HTTP 프로토콜 등) 장비를 구입하거나 소프트웨어를 구축하지 않아도 L4/L7 레벨의 부하 분산 기능을 사용할 수 있고 고가용성 서비스를 구축할 수 있다. 로드밸런싱 알고리즘은 라운드로빈 방식을 사용하며, 헬스체크를 통해서 연결된 EC2 인스턴스가 정상적이지 않은 경우 해당 EC2 인스턴스는 트래픽 분배에서 제외시킨다.
2. ELB 생성 후 EC2 인스턴스와 연결
자 그럼 우선 ELB를 만들어보도록 하자. ELB는 ALB(Application Load Balancer)로 만들 것이다.
AWS 홈페이지에서 콘솔에 로그인-> EC2를 선택한 후 로드 밸런싱을 선택한 후 로드 밸런서 생성 버튼을 클릭한다.
다음으로 Application Load Balancer를 선택하자.
이름을 입력하고, 리스너는 HTTPS를 선택한다. 가용영역에서는 VPC와 해당 로드밸런서가 활성화될 서브넷 영역을 지정해줄 수 있다. 생성한 VPC와 VPC에서 생성했던 서브넷을 전부 선택해주고 다음으로 넘어간다.
2단계 : 보안 설정 구성에서는 HTTPS을 사용하기 위한 인증서를 설정한다. 사용중인 인증서가 없기 때문에 인증서를 요청해야 한다. AWS에서는 ACM(Amazon Certificate Manager)를 통해 인증서를 프로비저닝하고 저장한다. ACM으로부터 새 인증서를 요청하도록 하자.
그럼 인증서 요청 화면으로 넘어가게 된다. 인증서 요청을 하기 전에 유효한 도메인 주소가 있어야 하고 Route 53에 DNS 서버를 등록해 놔야 한다. 필자는 twofootdog.com이라는 도메인을 호스팅케이알(https://www.hosting.kr/)에서 미리 받아 놓고 Route 53에 DNS서버를 등록해 놓은 상태이다. 도메인을 받고 Route53 DNS 서버 등록하는 방법은 (https://twofootdog.tistory.com/28)에서 확인 가능하다.
우선 인증서를 요청할 도메인 이름을 넣고 다음 버튼을 클릭한다(아래 그림에서는 *.twofootdog.com으로 등록했는데, 만약 도메인 명이 twofootdog.com이라면 그냥 twofootdog.com이라고만 입력하자. *를 넣게 되면 인증서가 정상 동작하지 않을 수 있다)
검증 방법 선택은 DNS검증을 선택한다.
태그 추가 및 검토 및 요청을 하게 되면 다음과 같은 화면이 뜨게 된다. 도메인 주소 클릭 후 Route 53에서 레코드 생성 버튼을 클릭하자.
Route53 호스팅 영역에 해당 CNAME을 등록하자.
CNAME을 등록하면 DNS 레코드가 Route 53 호스팅 영역에 작성되었다고 메시지가 뜬다. 계속 버튼을 클릭한다.
그러면 인증서 리스트가 나오는데 아직까지는 상태가 검증 보류 상태이다. 30분정도 기다리면 상태가 발급 완료로 변경된다.
다시 로드밸런싱 생성 화면으로 넘어오자. 2단계 : 보안설정구성에서 인증서 선택이 가능해진다. 방금 전 만든 인증서를 선택하고 3단계 : 보안 그룹 구성으로 넘어가자.
3단계 : 보안 그룹 구성에서는 보안그룹을 구성한다. 신규로 보안그룹을 한개 만들어주고 넘어가자.
4단계 : 라우팅 구성 화면에서는 로드밸런서를 연결할 대상그룹에 대한 구성정보를 입력하며, ALB<->Server(Instance) 사이에 발생하는 네트워크 통신에 대한 설정이다. 새 대상 그룹을 선택하고 이름을 적어주자. 포트에는 Server 단에서 호출될 서비스의 포트번호를 적어준다. 필자는 8080포트로 띄운 스프링부트 서비스를 호출해줄 것이기 때문에 8080포트를 적었다(스프링부트 서비스는 EC2 인스턴스의 8080포트에서 실행 중이며, SUCCESS라는 문자를 화면에 뿌려주는 간단한 서비스이다)
5단계 : 대상등록 에서는 로드밸런서를 연결할 대상그룹에 리소스를 등록한다. 필자는 EC2 인스턴스 1개를 대상그룹에 등록시켰다(물론 인스턴스 1개를 등록하는 것은 큰 의미가 없지만 해당 글에서는 로드밸런서 생성 및 EC2 인스턴스와의 연결이 목적이므로 1개의 인스턴스와만 연결했다)
6단계 : 검토 에서는 지금까지 등록한 로드밸런서에 대한 모든 정보를 검토할 수 있다. 특이사항이 없으면 생성 버튼을 클릭한다.
그러면 로드밸런서가 정상적으로 생성이 되며, 처음 상태는 provisioning 이었다가 몇분 후 active 상태로 변경된다.
기본 구성 화면에서 DNS이름을 보면 해당 로드밸런서의 주소가 나온다. 해당 값으로 접속을 해보자.
로드밸런서를 생성할 때 리스너를 HTTPS로 등록했으니 https://gajoa-test-alb-455740141.ap-northeast-2.elb.amazonaws.com 로 접속해보자.
접속을 시도하면 접속이 되지 않는다. 왜그럴까? 이유는 바로 로드밸런서와 연결된 EC2의 보안그룹이 다르기 때문에 연결이 되지 않는다. 그렇기 때문에 EC2의 보안그룹 인바운드에 로드밸런서의 보안그룹을 등록해줘야 한다.
등록 후 다시 접속해보면 정상적으로 서비스를 호출하는 것을 확인할 수 있다.
2. ELB에 외부 도메인 연동
로드밸런서 생성 후 EC2 인스턴스에 연결하는 방법은 위에 설명한대로 수행하면 된다. 그런데 우리의 최종 목표는 외부에서 발급받은 도메인으로 접속 시 로드밸런서를 통해서 EC2 인스턴스를 호출하는 것이다.
우선 콘솔에 로그인->Route 53으로 들어간다. 그러면 이전에 ACM 인증서때문에 등록해놓은 도메인 DNS 정보가 존재한다((https://twofootdog.tistory.com/28 참고) . 이곳에서 도메인과 ELB를 연동시킬 것이다.
레코드 세트 생성을 선택한 후 다음과 같이 입력한다. 별칭대상에서는 조금 전 등록해 놓은 ELB를 선택한다.
그리고 나서 등록한 도메인으로 접속을 해보면 정상적으로 접속되는 것을 확인할 수 있다.
참고
'IT > AWS' 카테고리의 다른 글
Windows10에 AWS CLI 설치(python과 pip 활용) (0) | 2020.02.06 |
---|---|
AWS Auto Scaling 적용 (0) | 2020.02.05 |
AWS Route 53에 도메인 등록하기(DNS 설정) (2) | 2020.02.03 |
AWS VPC 생성 후 EC2 생성하기 (2) | 2020.01.30 |
AWS 구성요소 정리 (0) | 2020.01.17 |
댓글