Route 53은 AWS에서 사용할 수 있는 가용성과 확장성이 뛰어난 DNS 웹 서비스이며 AWS 인프라뿐만 아니라 AWS 외부 인프라에도 효과적으로 연결할 수 있습니다. 따라서 개발자와 기업은 웹 서비스나 웹 애플리케이션에 사용자를 안정적이고 비용효율적으로 연결할 수 있습니다. Route 53은 Health Check 기능으로 애플리케이션의 앤드 포인트를 모니터링하여 유사시 자동으로 장애 조치가 가능해 고가용성을 보장합니다.
DNS - Domain Name System
- 사람이 알아볼 수 있는 호스트 이름을 서버 IP 주소로 번역한다.
- Backbone of Internet
- 계층적 이름 구조
- Terminologies - 용어
- Domain registrar : 도메인 이름을 등록하는 곳
- Amazon Route 53, Go Daddy
- DNS Recodes
- Zone File : 모든 DNS 레코드를 포함, 호스트 이름과 IP 주소를 일치시키는 방법
- Name Server : DNS 쿼리를 실제로 처리하는 서버
- Top Level Domain (TLD) : .com, .us, .in, .gov, .org …
- Second Level Domain (SLD) : amazon.com, google.com
- Sub Domain : www.example.com
- Domain Name : api.www.example.com
- Protocol : 연결에 사용되는 프로토콜 이름, http://, https://
- FQDN - Fully Qualified Domain Name : 전체 도메인 이름 - http://api.www.example.com
DNS 작동방식
![](https://velog.velcdn.com/images/whddms310/post/a2e54a7d-ea30-4813-85fd-0081dc4698c4/image.png)
- 웹 브라우저가 example.com에 접근하기 위해 로컬 DNS 서버에 물어본다.
- 로컬 DNS 서버는 보통 회사에 의해 할당 및 관리되거나 ISP에 의해 동적으로 할당
- 로컬 DNS 서버가 해당 쿼리를 이전에 본적이 없다면 ICANN에 의해 관리된 DNS 서버의 루트에 물어본다.
- Root DNS 서버는 가장 먼저 로컬 DNS서버로부터 요청을 받고 본 적은 없지만 .com 도메인을 알고 있어 TLD DNS 서버로 가볼 것을 .com NS 레코드로 IP 주소를 알려줌
- ICANN에 의해 관리되는 TLD DNS 서버는 example.com의 정확한 레코드를 알지 못해 쿼리에 당장 답할 수는 없지만 example.com의 서버를 알고 있어 example.com NS 레코드로 IP를 알려줌
- 마지막으로 도메인 이름 레지스트라에 의해 관리되는 Sub Domain의 DNS 서버에 물어본다. 해당 DNS 서버에는 example.com이 무엇인지 알고 있고 레코드를 확인하여 IP 주소를 답변한다.
- 레지스트라 : Amazon Route 53, Go Daddy
- DNS 서버는 반복적으로 DNS에 대한 질문하고 가장 구체적인 답변을 얻어내고 이후 동일한 요청이 발생하면 바로 답변을 줄수 있다. DNS 서버가 받은 답변을 브라우저로 보내고 브라우저는 IP 주소를 활용해서 웹 서버에 액세스할 수 있다.
Basic
-
고가용성 및 확장성을 갖추고 완전히 관리되며 권한있는 DNS
- Authoritative - 권한있는
- 사용자가 DNS 레코드를 업데이트할 수 있다.
-
Route 53은 도메인 레지스트라로 도메인 이름을 등록할 수 있다.
-
Route 53 리소스 상태확인 가능
-
100% SLA 가용성을 제공하는 유일한 AWS 서비스
SLA란 무엇인가요? - 서비스 수준 계약 설명 - AWS
-
Route 53의미
- 53은 전통적으로 DNS 포트로 사용하는 포트 번호이다.
-
Records
-
Hosted Zones
- 호스팅 존은 레코드의 컨테이너이며 도메인과 서브도메인으로 가는 트래픽의 라우팅 방식을 정의
- Public Hosted Zone
- 퍼블릭 도메인을 살 때마다 퍼블릭 호스팅 존을 만들 수 있다.
- 퍼블릭 존은 쿼리에 도메인 이름의 IP가 무엇인지 알 수 있다.
- Private Hosted Zone
- 공개되지 않은 도메인 이름을 지원
- VPC만이 URL을 리졸브할 수 있다.
- 회사 네트워크 혹은 인트라넷에서만 접근할 수 있는 도메인 존
- AWS에서 만드는 어떤 호스팅 존이든 월 50센트를 지불
Register Domain
-
도메인 이름 설정 및 가용성 확인 - 도메인은 고유한 이름을 사용해야한다.
-
사용할 최상위 도메인을 선택 후 사용 기간을 설정 및 자동 갱신 활성화 여부 설정
-
사용자 연락처 정보 입력
- 개인 정보 보호 옵션을 활성화하는 것을 권장한다.
-
검토 및 생성을 하면 등록한 결제수단으로 비용이 지불되며 도메인이 생성된다. 생성되는 시간은 몇 분에서 몇 시간 정도가 걸릴 수 있다.
-
호스팅 존에 가면 등록한 도메인 이름을 확인할 수 있고 도메인 이름을 클릭하면 도메인에 대한 레코드를 확인할 수 있다.
Create Domain
- 생성한 도메인에서 새로운 레코드를 생성할 수 있다.
- 레코드 이름 설정
- 레코드 타입 설정
- 레코드 타입에 알맞은 값을 입력
- TTL 설정
- 라우팅 정책 설정
- 테스트
- 생성한 레코드를 사용해서 브라우저로 접속을 시도하면 어떤 일이 발생한다
- A 레코드로 생성하고 값을 무작위 IP로 넣었을 때 해당 IP 주소와 연결된 서버가 있다면 접속이 될 수도 있지만 대게는 되지 않을 것이다.
- 터미널에서 간단하게 테스트하는 방법이 있다.
- AWS CloudShell에 bind-utils를 설치하면 nslookup과 dig가 설치된다.
- ‘nslookup 레코드’ 커맨드를 실행하면 레코드가 연결된 IP 주소로 보내지는 것을 확인할 수 있다.
- ‘dig 레코드’ 커맨드도 동일하게 실행할 수 있지만 nslookup에 비해 더 자세한 결과를 확인할 수 있다.
- 도메인의 레코드, 값, TTL등을 질문 세션, 응답 세션을 나누어 보여준다.
TTL
- TTL - Time to Live
- 클라이언드가 DNS 요청을 보내면 DNS으로부터 회신을 받는다.
- 회신 내용 중에는 TTL 정보가 포함되어있으며 TTL 동안 회신 내용을 클라이언트가 캐시하도록 요청한다.
- TTL 시간 동안에는 클라이언트가 재요청을 하거나 같은 호스트 이름으로 접속할 경우 DNS에 쿼리를 보내지 않아도 된다.
- 예시
- High TTL → 24hr
- Route 53의 트래픽이 현저히 줄어든다.
- 클라이언트가 오래된 레코드르 받을 가능성이 있다.
- 레코드를 수정하고자 하면 클라이언트 모두가 새 레코드를 받을 때까지 24시간이 걸린다는 것을 의미
- Low TTL → 60sec
- DNS 트래픽 양이 많아져서 요금이 증가한다. - Route 53은 들어오는 요청의 양에 따라 요금이 책정
- 이전 레코드의 보관 시간이 짧아져 레코드 변경이 빨라지고 레코드 변경이 편리해진다.
- 적합한 TTL을 설정하는 것은 상황에 따라 달라진다.
- 레코드를 변경하고자 할 때 TTL을 낮춘 다음 클라이언트가 변경된 TTL을 가진 것이 확인이 되면 레코드 값을 변경 및 클라이언트 업데이트 완료 후 다시 TTL을 올린다.
- TTL은 Alias 레코드를 제외한 모든 레코드에 필수다.
CNAME vs Alias
CNAME
- CNAME 레코드는 호스트 이름이 다른 호스트 이름으로 향할 수 있도록 한다.
- Root Domain 이름이 아닌 경우에만 가능
- something.example.com인 경우에만 가능
Alias
- AWS 리소스에만 한정적으로 사용할 수 있다.
- 호스트 이름을 특정 AWS 리소스로 향할 수 있다.
- Root Domain과 non Root Domain 모두 사용할 수 있다.
- 무료
- 자체적인 상태 확인 가능
- DNS의 확장 기능으로 모든 DNS에 사용할 수 있다.
- ALB에서 IP가 변경되면 Alias는 자동으로 인식한다.
- CNAME과 달리 Zone Apex이라는 DNS 네임스페이스의 상위 노드로 사용될 수 있다.
- example.com에도 Alias를 사용할 수 있다.
- AWS 리소스를 위한 Alias의 레코드 타입은 항상 A / AAAA이다.
- Alias를 설정하면 Route 53이 TTL을 설정하므로 사용자는 TTL을 설정할 수 없다.
Alias Records Target
- Elastic Load Balancers
- CloudFront Distributions
- API Gateway
- Elastic Beanstalk environments
- S3 Websites
- VPC Interface Endpoints
- Global Accelerator accelerator
- Route 53 record in the same hosted zone
- EC2 인스턴스의 DNS에 대해서는 Alias를 사용할 수 없다.
Routing Policies
- 라우팅 정책은 Route 53이 DNS 쿼리에 응답하는 것을 돕는다.
- Route 53에서 사용하는 라우팅 정책은 트래픽을 라우팅하는 것이 아닌 DNS 쿼리를 라우팅하는 것이다.
- 라우팅 정책을 통해 클라이언트들은 이를 통해 HTTP 쿼리 등을 처리하는 방법을 알게 된다.
- DNS는 호스트 이름들을 클라이언트가 실제 사용 가능한 엔드포인트로 변환하는 것을 돕는다.
- 정책 종류
- Simple - 단순
- Weighted - 가중치 기반
- Failover - 장애 조치
- Latency based - 지연 시간 기반
- Geolocation - 지리적
- Multi-ValueAnswer - 다중 값 응답
- Geoproximity (using Route 53 Traffic Flow feature) - 지리 근접
Simple
- 트래픽을 단일 리소스로 보내는 방식
- 동일한 레코드에 여러 개의 값을 지정하는 것이 가능
- DNS에 의해 다중 값을 받은 경우 클라이언트에서 무작위로 하나를 선택
- Alias를 함께 사용하면 하나의 AWS 리소스만을 대상으로 지정
- 상태 확인은 사용할 수 없다.
Weighted
- 가중치를 활용해 요청의 일부 비율을 특정 리소스로 보내는 방식의 제어가 가능하다.
- traffic(%) = Weight for a specific record / Sum of all the weights for all records
- DNS 레코드들은 동일한 이름과 유형을 가져야 한다.
- 상태확인을 사용할 수 있다.
- 가중치 0의 값을 보내면 트래픽 보내는 것을 중단해 가중치를 바꿀 수 있다.
- 모든 리소스 레코드의 가중치가 0이면 모두 같은 가중치를 가진다.
- Use case
- 서로 다른 지역들에 걸쳐 로드 밸런싱을 할 때
- 적은 양의 트래픽을 보내 새 애플리케이션을 테스트하는 경우에 사용
Latency-based
- 지연 시간이 가장 짧은, 가장 가까운 리소스로 리다이렉팅하는 정책
- 지연 시간에 민감한 웹사이트나 애플리케이션에 유용
- 지연 시간은 사용자가 레코드로 가장 가까이 있는 것으로 식별된 AWS 리전에 연결하기까지 걸리는 시간을 기반으로 측정
- 상태 확인과 연결이 가능
Failover (Active-Passive)
- 기본 EC2 인스턴스에 연결할 때 반드시 상태확인도 함께 연결해야한다.
- 기본 인스턴스에 장애가 발생하면 Route 53은 자동으로 재해 복구용 EC2 인스턴스로 연결되며 이때 상태확인은 선택사항이고 상태확인 기본, 보조 각각 하나씩만 사용가능
- 클라이언트에서는 정상으로 생각되는 리소스를 자동으로 얻게 된다.
Geolocation
- 지연 시간과 다르게 사용자의 실제 위치를 기반으로 한다.
- 사용자의 대륙이나 국가, 더 정확하게는 주, 도시 등 가장 정확하게 파악할 수 있는 위치를 기반으로 가장 가까운 곳의 IP로 라우팅된다.
- 일치하는 위치가 없는 경우 Default 레코드를 생성해야한다.
- 상태확인 연결 가능
- Use case
- 콘텐츠 분산을 제한하고 로드밸런싱을 실행하는 웹사이트 현지화
- 서비스가 지원하는 언어별로 서비스, 사용하려는 지역의 언어가 지원되지 않을 때는 기본 IP로 라우팅
Geoproximity Routing Policy
- 사용자와 리소스의 지리적 위치를 기반으로 트래픽을 리소스로 라우팅할 때 사용
- 편향값을 사용하여 특정 위치의 리소스로 더 많은 트래픽을 이동시키는 것
- 지리적 위치를 변경하기 위해서 편향값을 지정
- 특정 리소스에 더 많은 트래픽을 보내려면 편향값을 증가
- 트래픽을 줄이려면 편향값을 음수값으로 축소
- 리소스
- AWS 리소스 - 특정 리전의 리소스를 의미
- Non-AWS 리소스 - 위도와 경도를 지정해서 AWS가 위치를 파악하도록 한다.
- 편향값 활용을 위해 Route 53 Traffic Flow를 사용해야한다.
IP-based
- 클라이언트 IP를 기반으로 라우팅을 정의
- Route 53에서 CIDR 목록을 정의 - 클라이언트의 IP 범위
- CIDR에 따라 트래픽을 어느 위치에 보내야 하는지를 정함
- IP를 미리 알고 있어 성능을 최적화할 수 있고 비용을 절약할 수 있다.
- 예시
- 특정 ISP가 특정 IP 주소 셋을 사용하는 것을 안다면 특정 엔드포인트로 라우팅할 수 있다.
Multi-Value
- 트래픽을 다중 리소스로 라우팅할 때 사용
- Route 53은 다중 값과 리소스를 반환
- 상태확인과 연결하면 다중 값 정책에서 반환되는 유일한 리소스는 정상 상태 확인과 관련이 있다.
- 각 다중 값 쿼리에는 최대 8개의 정상 레코드가 반환된다.
- ELB와 유사해 보이지만 ELB를 대체할 수 없다.
Health Check
- 공용 리소스와 개인 리소스 모두 상태 확인을 사용할 수 있다.
- 상태 확인을 하는 이유는 DNS의 장애 조치를 자동화하기 위함
- 공용 엔드포인트 모니터링 - Application, Server, Other AWS Resources
- 다른 상태 확인을 모니터링 - Calculated Health Checks
- CloudWatch 경보 상태를 모니터링 - 개인 리소스를 모니터링에 유용
- 상태 확인은 각 서비스의 지표를 활용하고 원한다면 CloudWatch 지표에서도 확인 가능하다.
Monitor an Endpoint
- 전세계 15개의 health checker가 엔드포인트의 상태를 확인.
- Healthy/Unhealthy Threshold - 3 (default)
- Interval - 30sec (10초 간격도 가능하지만 더 높은 비용이 든다.)
- HTTP, HTTPS, TCP 등의 프로토콜을 지원
- 18%의 health checker가 엔드포인트를 정상으로 판단하면 Route 53도 정상으로 간주
- 상태 확인에 사용될 위치를 선택할 수 있다.
- 상태확인은 로드 밸런서로부터 2xx 혹은 3xx의 코드를 받아야 통과가 된다.
- 텍스트 기반 응답일 경우 응답의 처음 5120바이트를 확인
- 텍스트 응답에서 HTTP 응답 코드가 있는지 확인하기 위해
- 상태 확인이 애플리케이션 밸런서나 엔드포인트에 액세스 가능해야한다.
- Route 53의 상태 확인 IP 주소 범위에서 들어오는 모든 요청을 허용
Calculated Health Checks
- 여러 개의 상태 확인 결과를 하나로 합쳐주는 기능
- 상태 확인을 모두 합치기 위한 조건은 OR, AND, NOT을 사용한다.
- 하위 상태 확인을 256개까지 모니터링할 수 있다.
- 상위 상태 확인이 통과하기 위해 몇 개의 상태 확인을 통과해야하는지 설정 가능
- Usage
- 상태 확인이 실패하는 일 없이 상위 상태 확인이 웹사이트를 유지관리함
Private Hosted Zone
- 일반적으로 Route53 상태 확인은 VPC 외부에 있으므로 사설 엔드포인트로 액세스할 수 없다.
- CloudWatch 지표를 생성 및 CloudWatch 경보 연결을 통해 상태 확인을 만들 수 있다.
- 경보가 발생하면 상태 확인은 자동으로 비정상이 되게 한다.
Domain Registrar vs DNS Service
Domain Registrar
- 도메인 레지스트라에서 도메인을 구매할 수 있다.
- Amazon Route 53, Go Daddy, Google Domain
- 도메인 레지스트라에 도메인을 등록하면 DNS 레코드 관리를 위한 DNS 서비스를 제공
DNS Service
- 도메인 레지스트라를 사용하지 않아도 DNS 서비스로 DNS 레코드를 관리할 수 있다.
- 예시
- GoDaddy에서 도매인을 구매해서 Route 53에서 DNS 레코드를 관리해도 된다.
GoDaddy as Registrar & Route 53 as a DNS Service
- GoDaddy에 DNS를 등록하면 네임 서버 옵션이 생기는데 사용자 정의 네임 서버를 지정할 수 있다
- 먼저 Amazon Route 53에 원하는 도메인의 공용 호스팅 영역을 생성
- 호스팅 영역 상세에서 네임 서버를 확인하고 이것을 GoDaddy 웹사이트에서 변경한다.
3rd Party Registrar with Amazon Route 53
- Route 53에서 호스팅 영역을 생성
- 서드 파티 웹사이트에서 NS 레코드나 네임 서버를 업데이트
- 서드 파티에서 구매한 도메인이 Route 53을 가리키게 된다.
참고 자료
Route 53
정보 문화사 - 아마존 웹 서비스