Bỏ qua để đến nội dung

Amazon Route 53 – DNS được quản lý

DNS (Domain Name System) là hệ thống dịch các hostname thân thiện với con người thành địa chỉ IP dành cho máy. Ví dụ www.google.com được dịch thành 172.217.18.36. Không có DNS thì bạn sẽ phải nhớ những dãy số như thế cho từng website — nên nói DNS là xương sống của Internet là hoàn toàn đúng.

DNS dùng một cấu trúc đặt tên phân cấp (hierarchical): .com ở trên, rồi example.com, rồi tới www.example.comapi.example.com bên dưới.

Lấy ví dụ URL đầy đủ http://api.www.example.com. để phân tích:

  • Protocol: http
  • FQDN (Fully Qualified Domain Name): api.www.example.com.
  • Sub Domain: api.www
  • SLD (Second Level Domain): example
  • TLD (Top Level Domain): .com
  • Root: dấu . ở cuối cùng

Các thuật ngữ còn lại cần biết:

  • Domain Registrar (nhà đăng ký tên miền): Amazon Route 53, GoDaddy…
  • DNS Records: A, AAAA, CNAME, NS…
  • Zone File: file chứa các DNS record.
  • Name Server: máy giải (resolve) các truy vấn DNS — có loại Authoritative và Non-Authoritative.
  • TLD (Top Level Domain): .com, .us, .in, .gov, .org
  • SLD (Second Level Domain): amazon.com, google.com

Khi bạn muốn truy cập example.com, chuỗi truy vấn diễn ra như sau:

  1. Web Browser hỏi Local DNS Server (do công ty bạn quản lý, hoặc được ISP cấp động): example.com?
  2. Local DNS Server hỏi Root DNS Server (do ICANN quản lý) → trả về .com NS 1.2.3.4.
  3. Local DNS Server hỏi TLD DNS Server (.com) (do IANA, một nhánh của ICANN, quản lý) → trả về example.com NS 5.6.7.8.
  4. Local DNS Server hỏi SLD DNS Server (example.com) (do Domain Registrar quản lý, ví dụ Amazon Registrar, Inc.) → trả về example.com IP 9.10.11.12.
  5. Local DNS Server trả 9.10.11.12 về cho browser, và browser gọi trực tiếp tới Web Server ở IP đó.

Các kết quả trung gian đều được cache theo TTL, nhờ đó lần sau không phải đi lại hết chuỗi này.

Amazon Route 53 là một DNS có tính sẵn sàng cao, scalable, được quản lý hoàn toàn (fully managed) và Authoritative.

  • Authoritative nghĩa là khách hàng (chính bạn) có thể cập nhật các DNS record.
  • Route 53 cũng là một Domain Registrar — bạn mua tên miền trực tiếp tại đây được.
  • Có khả năng kiểm tra health của các resource của bạn.
  • Đây là dịch vụ AWS duy nhất có SLA khả dụng 100%.
  • Vì sao tên là “53”? Vì 53 là port DNS truyền thống.

Luồng đơn giản nhất: Client hỏi example.com? → Route 53 trả 54.22.33.44 → client kết nối tới EC2 Instance có Public IP 54.22.33.44.

Record định nghĩa cách bạn muốn định tuyến traffic cho một domain. Mỗi record chứa:

  • Domain/subdomain Name — ví dụ example.com.
  • Record Type — ví dụ A hoặc AAAA.
  • Value — ví dụ 12.34.56.78.
  • Routing Policy — cách Route 53 phản hồi các truy vấn.
  • TTL — khoảng thời gian record được cache tại các DNS Resolver.

Route 53 hỗ trợ các loại DNS record sau:

  • (phải biết) A / AAAA / CNAME / NS
  • (nâng cao) CAA / DS / MX / NAPTR / PTR / SOA / TXT / SPF / SRV
Type Ý nghĩa
A Map một hostname tới một địa chỉ IPv4
AAAA Map một hostname tới một địa chỉ IPv6
CNAME Map một hostname tới một hostname khác
NS Name Server của Hosted Zone — kiểm soát cách traffic được định tuyến cho domain

Với CNAME có hai giới hạn quan trọng:

  • Đích phải là một domain name có sẵn record A hoặc AAAA.
  • Không thể tạo CNAME cho node cao nhất của một DNS namespace (Zone Apex). Ví dụ: bạn không tạo được CNAME cho example.com, nhưng tạo được cho www.example.com.

Hosted Zonemột container chứa các record, định nghĩa cách định tuyến traffic tới một domain và các subdomain của nó.

  • Public Hosted Zones — chứa record chỉ định cách định tuyến traffic trên Internet (tên miền public), ví dụ application1.mypublicdomain.com.
  • Private Hosted Zones — chứa record chỉ định cách định tuyến traffic trong một hoặc nhiều VPC (tên miền private), ví dụ application1.company.internal.
  • Bạn trả $0.50 mỗi tháng cho mỗi hosted zone.

Hình dung sự khác biệt qua hai kịch bản:

  • Public Hosted Zone: một Client bên ngoài hỏi example.com? và nhận về 54.22.33.44 — các đích có thể là EC2 Instance có Public IP, Application Load Balancer, S3 Bucket, Amazon CloudFront.
  • Private Hosted Zone: trong VPC, một EC2 hỏi api.example.internal? và nhận 10.0.0.10; hỏi db.example.internal? và nhận 10.0.0.35. Các tên như webapp.example.internal, api.example.internal, db.example.internal đều trỏ tới Private IPchỉ giải được từ bên trong VPC.

TTL (Time To Live) quyết định các DNS resolver cache kết quả trong bao lâu. Khi client hỏi myapp.example.com?, Route 53 trả về A 12.34.56.78 kèm TTL; client cache kết quả đó trong suốt TTL rồi mới gửi HTTP request tới web server.

TTL Ưu điểm Nhược điểm
High TTL — ví dụ 24 giờ Ít traffic tới Route 53 Record có thể bị lỗi thời (outdated)
Low TTL — ví dụ 60 giây Record lỗi thời trong thời gian ngắn hơn, dễ thay đổi record Nhiều traffic tới Route 53 ⇒ tốn tiền ($)

Một điểm quan trọng: trừ Alias record, TTL là bắt buộc cho mọi DNS record.

Các resource của AWS (Load Balancer, CloudFront…) đều lộ ra một hostname của AWS, ví dụ lb1-1234.us-east-2.elb.amazonaws.com, nhưng bạn thì muốn người dùng vào myapp.mydomain.com. Có hai cách, và phân biệt được chúng gần như chắc chắn sẽ giúp bạn trong kỳ thi.

CNAME Alias
Trỏ tới Bất kỳ hostname nào khác (app.mydomain.comblabla.anything.com) Một AWS resource (app.mydomain.comblabla.amazonaws.com)
Root domain CHỈ dùng cho NON ROOT DOMAIN (dạng something.mydomain.com) Dùng được cho cả ROOT DOMAIN và NON ROOT DOMAIN (kể cả mydomain.com)
Chi phí Tính như record thường Miễn phí
Health check native health check
  • Map một hostname tới một AWS resource — đây là một phần mở rộng của chức năng DNS (không có trong DNS chuẩn).
  • Tự động nhận biết khi IP của resource thay đổi — đúng với thực tế là IP của ALB do AWS quản lý và có thể đổi.
  • Khác với CNAME, nó dùng được cho node cao nhất của DNS namespace (Zone Apex), ví dụ example.com.
  • Alias Record luôn có type A/AAAA khi trỏ tới AWS resource (IPv4 / IPv6).
  • Bạn không thể đặt TTL cho Alias record.

Ví dụ một record Alias: Record Name example.com, Type A, Value MyALB-123456789.us-east-1.elb.amazonaws.com, với Alias được bật.

  • Elastic Load Balancers
  • CloudFront Distributions
  • API Gateway
  • Elastic Beanstalk environments
  • S3 Websites
  • VPC Interface Endpoints
  • Global Accelerator accelerator
  • Route 53 record trong cùng hosted zone

Và một ngoại lệ phải nhớ: bạn KHÔNG thể đặt Alias record cho một EC2 DNS name.

Routing Policy định nghĩa cách Route 53 phản hồi các truy vấn DNS. Đừng để chữ “Routing” làm bạn nhầm: nó không giống routing của load balancer. DNS không định tuyến traffic nào cả — nó chỉ trả lời các truy vấn DNS; việc kết nối là do client tự làm sau khi nhận được câu trả lời.

Route 53 hỗ trợ các routing policy sau:

  • Simple
  • Weighted
  • Failover
  • Latency based
  • Geolocation
  • Multi-Value Answer
  • Geoproximity (dùng tính năng Route 53 Traffic Flow)
  • IP-based Routing
  • Thường dùng để định tuyến traffic tới một resource duy nhất.
  • Có thể chỉ định nhiều value trong cùng một record — ví dụ foo.example.com trả về A 11.22.33.44, A 55.66.77.88, A 99.11.22.33.
  • Nếu nhiều value được trả về, client tự chọn ngẫu nhiên một cái.
  • Khi Alias được bật, chỉ chỉ định một AWS resource.
  • Không thể gắn với Health Check.
  • Kiểm soát tỉ lệ % request đi tới từng resource cụ thể.
  • Gán cho mỗi record một trọng số tương đối (relative weight); tỉ lệ traffic của một record = weight của nó chia cho tổng weight của tất cả record.
  • Weight không cần cộng lại thành 100 — ví dụ weight 70 / 20 / 10 cho ra đúng 70% / 20% / 10%.
  • Các DNS record phải cùng tên và cùng type.
  • Có thể gắn với Health Check.
  • Use case: cân bằng tải giữa các region, test phiên bản ứng dụng mới
  • Gán weight bằng 0 cho một record để ngừng gửi traffic tới resource đó.
  • Nếu tất cả record đều có weight 0 thì tất cả record sẽ được trả về đều nhau.
  • Chuyển hướng tới resource có latency thấp nhất so với người dùng.
  • Cực hữu ích khi latency của người dùng là ưu tiên.
  • Latency được đo dựa trên traffic giữa người dùng và các AWS Region.
  • Vì thế người dùng ở Đức có thể bị chuyển tới Mỹ nếu đó là đường có latency thấp nhất — chứ không nhất thiết là region gần nhất về mặt địa lý.
  • Có thể gắn với Health Check (nhờ đó có khả năng failover).

Mô hình này rất đơn giản: một record Primary trỏ tới EC2 Instance chính, một record Secondary trỏ tới EC2 Instance dự phòng (Disaster Recovery). Health Check là BẮT BUỘC với record primary — khi health check fail, Route 53 tự trả về đích secondary.

  • Khác với Latency-based! Policy này dựa trên vị trí của người dùng.
  • Chỉ định vị trí theo Continent, Country, hoặc US State; nếu có chồng lấn thì vị trí chính xác nhất được chọn.
  • Nên tạo một record “Default” để dùng khi không match vị trí nào.
  • Use case: localization website, giới hạn phân phối nội dung, load balancing
  • Có thể gắn với Health Check.
  • Định tuyến traffic tới resource dựa trên vị trí địa lý của cả người dùng và resource.
  • Có khả năng dịch chuyển nhiều traffic hơn sang một resource dựa trên bias đã định nghĩa.
  • Để thay đổi kích thước vùng địa lý, bạn chỉ định giá trị bias:
    • Mở rộng: từ 1 đến 99 — nhiều traffic hơn vào resource đó.
    • Thu nhỏ: từ -1 đến -99 — ít traffic hơn vào resource đó.
  • Resource có thể là:
    • AWS resource (chỉ định AWS region).
    • Non-AWS resource (chỉ định Latitude và Longitude).
  • Bắt buộc phải dùng Route 53 Traffic Flow để dùng tính năng này.

Ví dụ trực quan: với us-east-1 bias 0 và us-west-1 bias 0, ranh giới chia nước Mỹ nằm ở giữa; khi đặt bias 50 cho us-east-1, vùng phục vụ của us-east-1 phình ra và hút thêm traffic từ phía tây.

  • Định tuyến dựa trên địa chỉ IP của client.
  • Bạn cung cấp một danh sách CIDR của clientendpoint/location tương ứng — tức là các mapping user-IP-to-endpoint.
  • Use case: tối ưu hiệu năng, giảm chi phí mạng
  • Ví dụ: định tuyến người dùng của một ISP cụ thể tới một endpoint cụ thể.

Cụ thể, bạn tạo một CIDR Collection:

Locations CIDR blocks
location-1 203.0.113.0/24
location-2 200.5.4.0/24

Rồi tạo các record trỏ theo location đó:

Record Name Value IP-based
example.com 1.2.3.4 location-1
example.com 5.6.7.8 location-2

Kết quả: User A (203.0.113.56) đi tới EC2 1.2.3.4, còn User B (200.5.4.100) đi tới EC2 5.6.7.8.

  • Dùng khi định tuyến traffic tới nhiều resource.
  • Route 53 trả về nhiều value/resource.
  • Có thể gắn với Health Check — và khi đó chỉ trả về value của các resource healthy.
  • Tối đa 8 record healthy được trả về cho mỗi truy vấn Multi-Value.
  • Multi-Value không phải là thứ thay thế cho một ELB.

HTTP Health Check chỉ dành cho các resource public. Health check là thứ mở ra khả năng Automated DNS Failover, và có ba loại:

  1. Health check theo dõi một endpoint (ứng dụng, server, hoặc AWS resource khác).
  2. Health check theo dõi các health check khác — gọi là Calculated Health Checks.
  3. Health check theo dõi CloudWatch Alarm — cho bạn toàn quyền kiểm soát; ví dụ throttle của DynamoDB, alarm trên RDS, custom metric… (rất hữu ích cho resource private).

Health check được tích hợp với các CloudWatch metric.

  • Khoảng 15 health checker toàn cầu sẽ kiểm tra health của endpoint.
  • Healthy/Unhealthy Threshold — mặc định 3.
  • Interval30 giây, có thể đặt xuống 10 giây (chi phí cao hơn).
  • Giao thức hỗ trợ: HTTP, HTTPS và TCP.
  • Nếu hơn 18% health checker báo endpoint healthy, Route 53 coi nó Healthy; ngược lại là Unhealthy.
  • Bạn có thể chọn những địa điểm nào mà Route 53 dùng để kiểm tra.
  • Health check chỉ pass khi endpoint trả về mã status 2xx hoặc 3xx.
  • Health check có thể được cấu hình để pass / fail dựa trên nội dung text trong 5120 byte đầu tiên của response.
  • Bạn phải cấu hình router/firewall để cho phép request đến từ Route 53 Health Checker — dải IP của chúng được công bố ở https://ip-ranges.amazonaws.com/ip-ranges.json.
  • Kết hợp kết quả của nhiều Health Check thành một Health Check duy nhất.
  • Bạn dùng được các phép OR, AND, hoặc NOT.
  • Có thể theo dõi tới 256 Child Health Check.
  • Bạn chỉ định bao nhiêu health check con cần pass để health check cha được coi là pass.
  • Ứng dụng: thực hiện bảo trì cho website mà không làm toàn bộ health check fail.

Đây là một hạn chế phải nhớ: Route 53 health checker nằm ngoài VPC, nên chúng không truy cập được các endpoint private (trong VPC private hoặc resource on-premises).

Cách giải quyết: tạo một CloudWatch Metric và gắn một CloudWatch Alarm, rồi tạo một Health Check kiểm tra chính cái alarm đó.

Hai thứ này không giống nhau, và đây cũng là một điểm hay ra đề:

  • Bạn mua hoặc đăng ký tên miền với một Domain Registrar, thường bằng cách trả phí hàng năm (GoDaddy, Amazon Registrar Inc.…).
  • Domain Registrar thường kèm luôn một DNS service để bạn quản lý DNS record.
  • Nhưng bạn có thể dùng một DNS service khác để quản lý DNS record của mình.
  • Ví dụ điển hình: mua domain ở GoDaddy và dùng Route 53 để quản lý DNS record.

Nếu bạn mua domain ở một registrar bên thứ ba, bạn vẫn dùng Route 53 làm DNS Service provider được, theo hai bước:

  1. Tạo một Hosted Zone trong Route 53.
  2. Cập nhật NS Record trên website của registrar bên thứ ba để trỏ tới Route 53 Name Servers.

Nhớ công thức: Domain Registrar != DNS Service — nhưng mọi Domain Registrar thường có kèm một vài tính năng DNS.

Mặc định, Route 53 Resolver tự động trả lời các truy vấn DNS cho:

  • Tên domain local của các EC2 instance.
  • Record trong Private Hosted Zone.
  • Record trên các public Name Server.

Hybrid DNS là việc giải các truy vấn DNS giữa VPC (Route 53 Resolver) và các mạng của bạn (các DNS Resolver khác). Mạng đó có thể là:

  • Chính VPC đó / VPC đã peered.
  • Mạng on-premises (kết nối qua Direct Connect hoặc AWS VPN).

Có hai loại Resolver Endpoint, và hướng của chúng là điều duy nhất bạn cần nhớ:

Endpoint Hướng Công dụng
Inbound Endpoint Từ mạng của bạn vào AWS Cho phép DNS Resolver của bạn giải được tên của AWS resource (ví dụ EC2 instance) và record trong Private Hosted Zone
Outbound Endpoint Từ AWS ra mạng của bạn Route 53 Resolver chuyển tiếp (forward) truy vấn DNS tới các DNS Resolver của bạn

Ví dụ với Inbound Endpoint: một Server on-premises hỏi app.aws.private?; DNS Resolver on-premises chuyển truy vấn qua kết nối VPN hoặc DX tới Resolver Inbound Endpoint trong private subnet; Route 53 Resolver tra trong Private Hosted Zone (aws.private) và trả về IP của EC2 Instance app.aws.private.

Ví dụ với Outbound Endpoint: một EC2 Instance trong VPC hỏi web.onpremise.private?; Route 53 Resolver forward truy vấn qua Resolver Outbound Endpoint và kết nối VPN/DX tới DNS Resolver on-premises (onpremise.private), nơi biết Server web.onpremise.private.

Chủ đề Cần nhớ
Route 53 DNS managed, Authoritative, cũng là Domain Registrar, có health check, SLA 100% — dịch vụ AWS duy nhất; “53” = port DNS
Record type phải biết A (IPv4) · AAAA (IPv6) · CNAME (hostname → hostname) · NS
CNAME Không dùng được cho Zone Apex (example.com), chỉ cho subdomain; trỏ tới bất kỳ hostname nào
Alias Trỏ tới AWS resource, dùng được cho root domain, miễn phí, có native health check, không đặt được TTL, luôn type A/AAAA; KHÔNG dùng cho EC2 DNS name
Hosted Zone Public (Internet) · Private (trong VPC); $0.50/tháng/hosted zone
TTL High (24h) = ít traffic nhưng dễ lỗi thời; Low (60s) = nhiều traffic ($) nhưng linh hoạt; bắt buộc trừ Alias record
Simple Một resource; nhiều value → client chọn ngẫu nhiên; không gắn được Health Check
Weighted Chia % theo weight tương đối, không cần cộng thành 100; cùng tên + cùng type; weight 0 = ngừng traffic; tất cả 0 = trả đều
Latency-based Theo latency tới AWS Region, không theo khoảng cách địa lý
Failover Active-Passive, Health Check bắt buộc cho primary
Geolocation Theo vị trí người dùng (Continent / Country / US State), nên có record Default
Geoproximity Vị trí user resource, bias 1..99 / -1..-99, cần Route 53 Traffic Flow
IP-based Theo CIDR của client, dùng CIDR Collection map IP → location
Multi-Value Trả tối đa 8 record healthy; không thay thế được ELB
Health Check ~15 checker toàn cầu, threshold 3, interval 30s (hoặc 10s), pass khi 2xx/3xx, cần >18% checker báo healthy; kiểm tra được 5120 byte đầu response
Calculated Health Check OR / AND / NOT, tới 256 child
Health Check private Checker nằm ngoài VPC ⇒ dùng CloudWatch Alarm rồi health check trỏ vào alarm
Registrar vs DNS hai thứ khác nhau; mua domain nơi khác thì tạo Hosted Zone rồi đổi NS record sang Route 53 Name Servers
Resolver Endpoint Inbound = on-premises giải tên AWS · Outbound = AWS giải tên on-premises