본문 바로가기

프로그래밍/AWS Solutions Architect

AWS SAA - Amazon Route 53

DNS

  • Domain Name System으로 사람에게 친숙한 호스트 이름을 대상 서버 IP 주소로 번역해준다.
  • DNS는 인터넷의 중추로 URL과 호스트 이름을 IP로 변환하는 것이다.
  • DNS는 계층적 이름 구조를 가지고 있다.

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 동작 원리

  1. 웹 브라우저에서 example.com을 입력한다.
  2. Local DNS Server에 example.com의 IP 주소를 확인한다. (회사에 의해 할당되고 관리되거나 인터넷 서비스 제공자에 동적으로 할당된다.)
  3. Local DNS Server에서 해당 값이 없을 경우 ICANN에 의해 관리된 Root DNS Server에 확인한다.
  4. Root DNS Server는 .com의 Name Server IP 주소를 알려준다.
  5. IANA에 의해 관리되는 .com Name Server에 example.com의 IP 주소를 확인한다.
  6. .com Name Server는 example.com의 Name Server IP 주소를 알려준다.
  7. 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가 캐싱 되는 시간

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은 요청의 양에 따라 요금이 책정된다.
    • 오래된 레코드의 보관 시간이 짧아진다.
      • 레코드 변경이 빨라진다.
  • 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의 장애 조치를 자동화하기 위한 작업
  1. Health Check를 통해 endpoint를 모니터링한다. (application, server, other AWS resource)
  2. Health Check를 통해 다른 Health Check를 모니터링 할 수 있다. - 계산된 상태 확인 (Calculated Health Checks)
  3. 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