DNS
- Domain Name System으로 사람에게 친숙한 호스트 이름을 대상 서버 IP 주소로 번역해준다.
- DNS는 인터넷의 중추로 URL과 호스트 이름을 IP로 변환하는 것이다.
- DNS는 계층적 이름 구조를 가지고 있다.
- www.google.com
- .com
- www.example.com / api.example.com
- .com
- www.google.com
DNS 관련 용어
- Domain Registrar
- 도메인 이름을 등록하는 곳
- Amazon Route 53, GoDaddy 등등
- DNS Records
- A, AAAA, CNAME, NS 등
- Zone File
- 모든 DNS 레코드를 포함한다.
- 호스트 이름과 IP 또는 주소를 일치시키는 방법이다.
- Name Server
- DNS 쿼리를 실제로 해결하는 서버
- Top Level Domain(TLD)
- .com, .us, .in, .gov, .org 등
- Second Level Domain(SLD)
- amazon.com, google.com 등
DNS 동작 원리
- 웹 브라우저에서 example.com을 입력한다.
- Local DNS Server에 example.com의 IP 주소를 확인한다. (회사에 의해 할당되고 관리되거나 인터넷 서비스 제공자에 동적으로 할당된다.)
- Local DNS Server에서 해당 값이 없을 경우 ICANN에 의해 관리된 Root DNS Server에 확인한다.
- Root DNS Server는 .com의 Name Server IP 주소를 알려준다.
- IANA에 의해 관리되는 .com Name Server에 example.com의 IP 주소를 확인한다.
- .com Name Server는 example.com의 Name Server IP 주소를 알려준다.
- example.com Name Server에서 example.com의 공용 IP를 확인한다.
- example.com Name Server는 서브 도메인의 DNS 서버고 이는 Domain Name Registrar로 관리된다.
- 찾은 결과는 Local DNS Server에 캐싱되어 차후에 같은 질의를 할 경우 바로 해당하는 값을 반환해준다.
Amazon Route 53
- 고가용성, 확장성을 갖추고 있고, 완전히 관리되며 권한있는(Authoritative) DNS이다.
- Authoritative는 고객이 DNS 레코드를 업데이트 할 수 있다는 뜻이다.
- Domain Registrar이다.
- Resource 관련 상태 확인을 할 수 있다.
- 100% SLA 가용성을 제공하는 유일한 AWS 서비스이다.
- Route 53은 53이 전통적인 DNS Port여서 지어졌다.
Records
- Route 53에서 여러 DNS 레코드를 정의하고 레코드를 통해 특정 도메인으로 라우팅하는 방법을 정의한다.
- Record가 포함하는 것
- Domain / SubDomain Name
- 예 : example.com
- Record Type
- 예 : A, AAAA, CNAME, NS
- Value
- 예 : 192.0.0.1
- Routing Policy
- Route 53이 쿼리에 응답하는 방식
- TTL(Time To Live)
- DNS Resolver에서 Record가 캐싱 되는 시간
- Domain / SubDomain Name
Record Type
- A
- hostname과 IPv4 IP를 매핑해준다.
- AAAA
- hostname과 IPv6 IP를 매핑해준다.
- CNAME
- hostname을 다른 hostname과 매핑한다.
- 대상 hostname이 A나 AAAA Record가 될 수 있다.
- Rout 53에서 DNS Namespace(Zone Apex) 의 상위 노드에 대한 CNAME을 생성할 순 없다.
- 예를 들어 example.com에 CNAME을 만들 수는 없지만 www.example.com에 대한 CNAME Record는 만들 수 있다.
- NS
- Hosted Zone의 Name Server
- 서버의 DNS Name 또는 IP 주소로 Hosted Zone에 대한 DNS 쿼리에 응답할 수 있다.
- 트래픽이 도메인으로 라우팅 되는 방식을 제어한다.
Hosted Zones
- Hosted Zone은 Record의 컨테이너이다.
- domain과 subdomain으로 가는 트래픽의 라우팅 방식을 정의한다.
- Public Hosted Zone
- 인터넷에서 트래픽을 라우팅하는 방법을 지정하는 레코드를 포함한다. (public domain names)
- 예 : applicatoin1.mypublicdomain.com
- Private Hosted Zone
- 공개되지 않는 도메인 지원
- 가상 프라이빗 클라우드(Virtual Private Cloude)만이 URL을 Resolve 할 수 있다.
- 예 : application1.company.internal
- Hosted Zone은 월 50센트를 지불해야 한다.
- Public vs Private Hosted Zone
- 퍼블릭 호스팅 존은 공개된 클라이언트로부터 온 쿼리에 응답할 수 있다.
- 예 : 웹 브라우저에서 example.com을 요청하면 IP를 반환한다.
- 프라이빗 호스팅 존은 해당 VPC에서만 작동한다.
- private domain name의 private resource를 식별할 수 있게 한다.
- 퍼블릭 호스팅 존은 공개된 클라이언트로부터 온 쿼리에 응답할 수 있다.
Records TTL (Time To Live)
- TTL만큼 클라이언트에 캐시 될 수 있다.
- 클라이언트가 재요청을 보내거나 같은 Host Name으로 접속할 경우 클라이언트는 DNS 시스템에게 쿼리를 보내지 않아도 된다.
- 높은 TTL - ex) 24시간
- Route 53의 트래픽이 현저히 적어진다.
- 클라이언트는 요청을 적게 보낸다.
- 클라이언트가 오래된 레코드를 받을 가능성이 있다.
- 레코드를 바꾸고자 한다면 모든 클라이언트들이 새 레코드를 캐시에 저장할 때까지 24시간을 기다려야 한다.
- 낮은 TTL - ex) 60초
- DNS에 트래픽의 양이 많아져서 비용이 많이 든다.
- Route 53은 요청의 양에 따라 요금이 책정된다.
- 오래된 레코드의 보관 시간이 짧아진다.
- 레코드 변경이 빨라진다.
- DNS에 트래픽의 양이 많아져서 비용이 많이 든다.
- TTL은 모든 레코드에 있어 필수적이다.
CNAME VS Alias
AWS Resource(Load Balancer, CloudFront 등)을 사용하면 AWS hostname이 노출된다.
- 보유한 도메인에 hostname을 매핑할 수 있다.
CNAME
- hostname이 다른 hostname으로 향하도록 할 수 있다. (ex. app.mydomain.com => blabla.anything.com)
- Root Domain이 아닌 경우에만 가능하다. (ex. something.mydomain.com (0) / mydomain.com (X))
Alias
- hostname을 특정 AWS Resource로 향하도록 할 수 있다. (ex. app.mydomain.com => blabla.amazonaws.com)
- Root 혹은 Root가 아닌 도메인 모두에 작동한다. (ex. something.mydomain.com (0) / mydomain.com (o))
- 무료이다.
- 자체적으로 상태 확인이 가능하다.
Alias Records
- AWS resource에만 매핑이 되어있다.
- DNS의 확장 기능으로 시중의 모든 DNS에서 가능하다.
- ALB 기반에서 IP가 바뀌면 바로 인식한다.
- CNAME과 달리 Zone Apex라는 DNS namespace의 상위 노드로 사용될 수 있다. (ex. example.com)
- AWS Resource를 위한 Alias Records는 항상 A / AAAA 타입이다.(IPv4, IPv6)
- TTL을 설정할 수 없다.
- Route 53에 의해 자동으로 설정된다.
Alias Records의 대상
- Elastic Load Balancers
- CloudFront 배포
- API Gateway
- Elastic Beanstalk environments
- S3 Website
- S3 버킷은 안되고 버킷들이 웹사이트로 활성화 될 시 즉, S3 웹사이트는 가능하다.
- VPC Interface EndPoint
- Global Accelerator accelerator
- 동일한 hosted zone에 있는 Route 53 record
- EC2 DNS Name은 절대 Alias Record의 대상이 될 수 없다.
Routing Policies
- Route 53이 DNS 쿼리에 응답하는 것을 돕는다.
- "Routing"이라는 단어를 혼동하면 안된다.
- 로드밸런서가 트래픽을 백엔드 EC2 인스턴스로 라우팅하는 것과 다른 상황이다.
- 여기서 말하는 것은 DNS 쿼리 관점이다. DNS는 트래픽을 라우팅하지 않는다.
- 트래픽은 DNS를 통과하지 않는다. DNS는 DNS 쿼리에만 응답하게 되고 클라이언트들은 이를 통해 HTTP 쿼리 등을 어떻게 처리해야 하는지를 알 수 있게 된다.
- Route 53이 지원하는 Routing Polices는 다음과 같다.
- Simple(간단)
- Weighted(가중치 기반)
- Failover(장애 조치)
- Latency based(지연 시간 기반)
- Geolocation(지리적)
- Multi-Value Answer(다중 값 응답)
- Geoproximity(지리 근접 라우팅 정책)
Simple
- 트래픽을 단일 resource로 보내는 방식
- 동일한 record에 여러 개의 값을 지정할 수 있다.
- DNS에서 다중 값을 받은 경우 클라이언트는 하나를 무작위로 고르게 된다.
- Alias와 함께 사용하면 하나의 AWS Resource만을 대상으로 지정할 수 있다.
- 상태 확인(Health Check)을 할 수 없다.
Weighted
- 가중치를 활용해 요청의 일부 비율을 특정 리소스로 보내는 식의 제어가 가능하다.
- 각 레코드로 보내지는 트래픽의 양(%) = 해당 레코드의 가중치 / 전체 가중치
- Weight의 합이 100이 아니어도 된다.
- DNS record들은 동일한 이름과 타입을 가져야 한다.
- 상태 확인을 할 수 있다.
- 사용하는 예
- 서로 다른 지역들에 걸쳐 로드 밸런싱을 할 때
- 적은 양의 트래픽을 보내 새 애플리케이션을 테스트 하는 경우
- 가중치 0의 값을 보내게 되면 특정 리소스에 트래픽 보내기를 중단해 가중치를 바꿀 수 있다.
- 만약 모든 record들의 가중치의 값이 0인 경우 모든 record들은 동일한 가중치를 가지게 된다.
Latency-based
- 지연 시간이 가장 짧은(가장 가까운) Resource로 리다이렉팅 한다.
- 지연 시간에 민감한 웹사이트나 애플리케이션이 있는 경우에 아주 유용한 정책이다.
- 지연 시간은 유저가 record로 가장 가깝게 식별된 AWS Region에 연결하기까지 걸리는 시간을 기반으로 측정된다.
- 만약 유저가 독일에 있고 미국에 있는 리소스의 지연 시간이 가장 짧다면, 해당 유저는 미국 Region으로 리다이렉팅 된다.
- 상태 확인과 연결이 가능하다.
Health Checks(상태 확인)
- HTTP Health Check는 public resource만 가능하다.
- Health Check => DNS의 장애 조치를 자동화하기 위한 작업
- Health Check를 통해 endpoint를 모니터링한다. (application, server, other AWS resource)
- Health Check를 통해 다른 Health Check를 모니터링 할 수 있다. - 계산된 상태 확인 (Calculated Health Checks)
- Health Check를 통해 CloudWatch Alarms의 상태를 모니터링 할 수 있다.
- 예를 들어 DynamoDB의 쓰로틀, RDS의 알람, 커스텀 메트릭 등
- Health Check는 CloudWatch 메트릭에서도 확인이 가능하다.
- Private Hosted Zone의 Health Check를 하려면 CloudWatch Metric과 CloudWatch Alarm을 활용해 모니터링 할 수 있다.
Failover (Active-Passive)
- Health Check는 1개의 Primary EC2 인스턴스와 1개의 Secondary EC2 인스턴스로 구성된다.
- Health Check와 primary record를 연결하는건 필수적이다.
- Health Check이 비정상이면 자동으로 Route 53은 Secondary EC2 인스턴스로 결과를 보내는 장애 조치를 수행한다.
Geolocation
- Latency-based와 다르다.
- 사용자의 실제 위치를 기반으로 동작한다.
- 사용자가 특정 대륙이나 국가에 있는지 지정하는 것이며 가장 정확한 위치가 선택되어 해당 IP로 라우팅한다.
- 일치하는 위치가 없는 경우는 Default record를 생성해야 한다.
- 사용 예
- 콘텐츠 분산 제한
- 웹사이트 현지화
- 로드 밸런싱
- 상태 확인과 연결이 가능하다.
Geoproximity
- 사용자와 리소스의 지리적 위치를 기반으로 트래픽을 리소스로 라우팅하도록 한다.
- 편향 값(bias)을 사용해 특정 위치를 기반으로 더 많은 트래픽을 리소스로 이동하게 한다.
- 지리적 위치를 변경하려면 편향 값을 지정해야 한다.
- 특정 리소스에 더 많은 트래픽을 보내려면 편향값을 증가시켜서 확장한다.
- 반대로 리소스에 트래픽을 줄이려면 편향값을 음수로 축소시키면 된다.
- Resource
- AWS resources (특정 Region을 지정하면 목록에서 자동으로 올바른 라우팅을 계산한다.)
- Non-AWS resources (특정 위도와 경도를 지정해서 AWS가 위치를 파악하도록 해야 한다.)
- 이 기능을 선택하려면 Route 53의 Traffic Flow를 사용한다.
Traffic flow
- 크고 복잡한 설정을 간단하게 만들어 줄 수 있다.
- 시각화 에디터로 복장한 라우팅 결정 트리를 볼 수 있다.
- Traffic Flow Policy로 설정이 저장된다.
- 다른 Route 53 Hosted Zone에 적용할 수 있다. (다른 도메인 네임)
- 버전을 지원한다.
Multi-Value
- 트래픽을 다중 리소스로 라우팅할 때 사용한다.
- Route 53은 다중 값과 리소스를 반환한다.
- 유일한 리소스는 정상적인 Health Check 하는데 관련이 있다.
- 각각의 다중 값 쿼리에 최대 8개의 healthy record가 반환된다.
- ELB와 유사해 보이지만 ELB를 대체할 수는 없다.
- 클라이언트 측면의 로드밸런싱이다.
'프로그래밍 > AWS Solutions Architect' 카테고리의 다른 글
AWS SAP - IAM (0) | 2024.02.27 |
---|---|
AWS SAA - Amazon S3 (0) | 2022.05.19 |
AWS SAA - Amazon ElastiCache (0) | 2022.05.17 |
AWS SAA - Amazon Aurora (0) | 2022.05.17 |
AWS SAA - Amazon RDS (0) | 2022.05.15 |