Route 53
Phần lớn chương này xoay quanh một câu hỏi duy nhất mà đề thi hỏi đi hỏi lại: tình huống này dùng routing policy nào? Nắm chắc 8 policy cộng với cặp CNAME/Alias là gần như đủ điểm chương.
DNS hoạt động thế nào
DNS = Domain Name System — dịch tên miền dễ nhớ của con người thành địa chỉ IP mà máy hiểu. Đây là xương sống của Internet.
Thuật ngữ cần thuộc
| Thuật ngữ | Nghĩa |
|---|---|
| Domain Registrar | Nơi đăng ký tên miền: Route 53, GoDaddy… |
| DNS Records | Các bản ghi: A, AAAA, CNAME, NS… |
| Zone File | Tệp chứa toàn bộ bản ghi DNS của một tên miền |
| Name Server | Máy chủ trả lời truy vấn DNS |
| TLD (Top Level Domain) | .com, .vn, .org, .gov |
| SLD (Second Level Domain) | amazon.com, google.com |
Đọc một tên miền đầy đủ
http://api.www.example.com.
↑ Root (dấu chấm cuối, thường ẩn)
.com ← TLD
example.com ← SLD
www ← Sub Domain
api ← Sub Domain
Toàn bộ api.www.example.com = FQDN (Fully Qualified Domain Name)
Một truy vấn DNS đi qua đâu
- Trình duyệt hỏi Local DNS Server (do công ty hoặc nhà mạng quản lý)
- Local DNS hỏi Root DNS Server (ICANN quản lý) → được chỉ sang máy chủ của
.com - Hỏi TLD DNS Server (IANA quản lý) → được chỉ sang máy chủ của
example.com - Hỏi SLD DNS Server (domain registrar quản lý) → nhận về địa chỉ IP
- Kết quả được cache lại theo TTL để lần sau khỏi hỏi lại
Route 53 Overview
Route 53 là DNS được quản lý, có tính sẵn sàng cao, co giãn tốt, và quan trọng là authoritative — nghĩa là bạn toàn quyền cập nhật bản ghi DNS của mình.
- Nó đồng thời là Domain Registrar — mua tên miền ngay trong AWS được.
- Có khả năng kiểm tra sức khỏe tài nguyên (health check).
- Là dịch vụ AWS duy nhất có SLA 100% availability.
- Tên "53" là nhắc tới port 53 truyền thống của DNS.
Route 53 nằm trong nhóm dịch vụ global cùng IAM, CloudFront và WAF — không thuộc region nào.
Record types & Hosted Zones
Một bản ghi gồm những gì
- Tên miền / tên miền con —
example.com - Record Type — A, AAAA, CNAME, NS…
- Value —
12.34.56.78 - Routing Policy — Route 53 chọn trả lời thế nào
- TTL — bản ghi được cache bao lâu ở DNS resolver
Bốn record type phải nhớ
| Type | Trỏ tới |
|---|---|
| A | Hostname → địa chỉ IPv4 |
| AAAA | Hostname → địa chỉ IPv6 |
| CNAME | Hostname → một hostname khác (hostname đích phải tự phân giải được về A hoặc AAAA) |
| NS | Name Server của hosted zone — quyết định traffic của tên miền được định tuyến ra sao |
Ngoài ra còn CAA, DS, MX, NAPTR, PTR, SOA, TXT, SPF, SRV — đề SAA hầu như không hỏi sâu.
Hosted Zones
| Public Hosted Zone | Private Hosted Zone | |
|---|---|---|
| Phục vụ ai | Người dùng trên Internet | Chỉ trong một hoặc nhiều VPC |
| Tên miền | Tên miền công khai | Tên miền nội bộ (api.internal.company) |
Chi phí: $0.50 mỗi hosted zone mỗi tháng.
Một công ty dùng public hosted zone cho shop.company.com phục vụ khách hàng, và một private hosted zone cho db.internal, cache.internal chỉ phân giải được từ bên trong VPC. Nhờ vậy ứng dụng gọi database bằng tên cố định thay vì IP, và tên đó không bao giờ lộ ra ngoài Internet.
TTL — Time To Live
TTL bảo client giữ kết quả DNS trong bộ nhớ đệm bao lâu trước khi hỏi lại.
| TTL cao (ví dụ 24 giờ) | TTL thấp (ví dụ 60 giây) | |
|---|---|---|
| Lượng truy vấn tới Route 53 | Ít → rẻ hơn | Nhiều → tốn tiền hơn |
| Khi đổi bản ghi | Client giữ giá trị cũ rất lâu | Client cập nhật nhanh |
TTL là bắt buộc cho mọi bản ghi, trừ Alias record (Route 53 tự đặt).
"Đã cập nhật bản ghi trỏ sang Load Balancer mới nhưng người dùng vẫn vào cái cũ" → nguyên nhân là TTL. Client vẫn đang dùng kết quả cache từ trước, phải chờ hết TTL mới hỏi lại.
Bạn định chuyển website sang Load Balancer mới vào Chủ nhật. Nếu TTL đang là 24 giờ thì suốt một ngày sau khi đổi vẫn còn người vào máy cũ. Cách chuẩn: hạ TTL xuống 60 giây từ vài ngày trước, đợi TTL cũ hết hạn hoàn toàn, rồi mới đổi bản ghi — lúc đó toàn bộ người dùng chuyển sang trong vòng một phút. Xong việc thì nâng TTL trở lại để tiết kiệm chi phí truy vấn.
CNAME vs Alias
Tài nguyên AWS (Load Balancer, CloudFront…) đưa ra một hostname xấu xí kiểu lb1-1234.us-east-2.elb.amazonaws.com, còn bạn muốn dùng myapp.mydomain.com. Có hai cách trỏ, và chọn sai là hỏng.
| CNAME | Alias | |
|---|---|---|
| Trỏ tới | Bất kỳ hostname nào | Chỉ tài nguyên AWS |
| Dùng ở root domain (zone apex) | KHÔNG ĐƯỢC | ĐƯỢC |
| Dùng ở subdomain | Được | Được |
| Chi phí | Tính phí truy vấn | Miễn phí |
| Health check | Không | Có sẵn |
| TTL | Bạn tự đặt | Route 53 tự đặt, không sửa được |
| Record type | CNAME | Luôn là A hoặc AAAA |
Không thể tạo CNAME ở zone apex — tức là ở chính mycoolcompany.com. Chỉ subdomain kiểu www.mycoolcompany.com mới dùng CNAME được. Muốn trỏ tên miền gốc vào ELB thì bắt buộc dùng Alias. Đây là câu đầu tiên trong quiz gốc và xuất hiện rất nhiều trong đề thật.
Alias trỏ được tới những gì
- Elastic Load Balancer
- CloudFront Distribution
- API Gateway
- Elastic Beanstalk environment
- S3 Website (không phải S3 bucket thường)
- VPC Interface Endpoint
- Global Accelerator
- Một bản ghi Route 53 khác trong cùng hosted zone
Không đặt được Alias trỏ tới DNS name của một EC2 instance. Đề hay cài phương án này làm mồi.
Alias tự nhận biết khi IP của tài nguyên AWS thay đổi. Load balancer đổi IP bên dưới thì bản ghi vẫn đúng, bạn không phải làm gì.
Tám Routing Policies
Đừng nhầm với routing của Load Balancer. DNS không định tuyến traffic — nó chỉ trả lời truy vấn. Routing policy quyết định Route 53 trả về giá trị nào, sau đó client tự kết nối.
1. Simple
- Trỏ tới một tài nguyên duy nhất.
- Khai báo được nhiều giá trị trong cùng một bản ghi — khi đó client tự chọn ngẫu nhiên một cái.
- Nếu bật Alias thì chỉ được một tài nguyên AWS.
- Không gắn được health check — đây là điểm ra thi.
2. Weighted
Chia traffic theo tỷ lệ phần trăm bạn đặt cho từng bản ghi.
% traffic của một bản ghi = trọng số của nó / tổng trọng số tất cả bản ghi
Ví dụ: A=95, B=5 → A nhận 95%, B nhận 5%
Trọng số KHÔNG cần cộng lại bằng 100.
- Các bản ghi phải cùng tên và cùng type.
- Gắn được health check.
- Đặt trọng số 0 để ngừng gửi traffic tới một tài nguyên. Nếu tất cả đều bằng 0 thì mọi bản ghi được trả về đều nhau.
Bạn vừa deploy phiên bản mới lên một môi trường Elastic Beanstalk riêng và muốn chỉ 5% người dùng thật đi vào đó để theo dõi CloudWatch xem có lỗi không. Đặt trọng số 95 cho môi trường cũ và 5 cho môi trường mới. Chạy vài giờ thấy ổn thì nâng dần lên 20, 50, rồi 100. Có lỗi thì kéo về 0 ngay — chỉ 5% người dùng bị ảnh hưởng thay vì toàn bộ.
3. Latency-based
Trả về tài nguyên có độ trễ thấp nhất so với người dùng. Độ trễ được đo giữa người dùng và các AWS Region.
Latency không phải là "gần nhất về địa lý". Người dùng ở Đức hoàn toàn có thể được trả về region ở Mỹ nếu đường mạng tới đó nhanh hơn. Gắn được health check nên có khả năng failover.
4. Failover (Active-Passive)
- Một bản ghi primary — bắt buộc phải có health check.
- Một bản ghi secondary dùng cho tình huống thảm họa.
- Primary hỏng → Route 53 tự trả về secondary.
Website chính chạy ở region Singapore. Bạn dựng thêm một trang tĩnh trên S3 ở region Tokyo với nội dung "hệ thống đang bảo trì". Cấu hình failover: khi health check báo Singapore chết, người dùng tự được chuyển sang trang thông báo thay vì nhìn thấy lỗi trình duyệt — vừa giữ hình ảnh chuyên nghiệp vừa giảm cuộc gọi tới tổng đài.
5. Geolocation
Định tuyến dựa trên vị trí của người dùng, khai báo theo châu lục, quốc gia, hoặc bang của Mỹ. Nếu chồng lấn thì vị trí cụ thể nhất thắng.
Luôn tạo một bản ghi Default cho trường hợp không khớp vị trí nào. Thiếu nó thì người dùng ở khu vực chưa khai báo sẽ không truy cập được.
Yêu cầu pháp lý: chỉ người ở Pháp mới được vào website. Cấu hình Geolocation: bản ghi cho Pháp trỏ tới hệ thống thật, bản ghi Default trỏ tới một trang thông báo "dịch vụ không khả dụng ở khu vực của bạn". Ứng dụng khác cùng cơ chế: hiển thị đúng ngôn ngữ và bảng giá theo quốc gia, hoặc chặn nội dung có bản quyền theo vùng.
6. Geoproximity
Định tuyến theo khoảng cách địa lý giữa người dùng và tài nguyên, kèm khả năng dịch chuyển ranh giới bằng tham số bias.
| Bias | Tác dụng |
|---|---|
| 1 đến 99 | Mở rộng vùng phủ → kéo thêm traffic về tài nguyên đó |
| -1 đến -99 | Thu hẹp vùng phủ → đẩy traffic sang tài nguyên khác |
Tài nguyên có thể là AWS (khai báo region) hoặc ngoài AWS (khai báo kinh độ và vĩ độ). Bắt buộc dùng Route 53 Traffic Flow mới cấu hình được.
Bạn có data center ở Hà Nội và một region AWS ở Singapore. Bình thường người dùng miền Trung chia đôi giữa hai nơi. Data center Hà Nội sắp bảo trì nên bạn đặt bias âm cho nó — vùng phủ co lại và phần lớn traffic tự dồn về Singapore, mà không phải sửa từng bản ghi.
7. IP-based Routing
Định tuyến theo dải IP của client. Bạn cung cấp danh sách CIDR kèm endpoint tương ứng.
Dùng khi: tối ưu hiệu năng hoặc giảm chi phí mạng — ví dụ đưa người dùng của một nhà mạng cụ thể tới một endpoint riêng.
8. Multi-Value
- Trả về nhiều giá trị cùng lúc, client tự chọn.
- Gắn được health check — chỉ những tài nguyên khỏe mới được trả về.
- Trả tối đa 8 bản ghi khỏe mạnh cho mỗi truy vấn.
Multi-Value không thay thế được Load Balancer. Nó chỉ là cách chia tải sơ khai ở tầng DNS, không có health check sâu, không có sticky session, không có SSL termination.
Bảng chọn nhanh
| Policy | Chọn khi đề nói | Health check |
|---|---|---|
| Simple | Một tài nguyên duy nhất, không điều kiện gì | Không |
| Weighted | Chia theo phần trăm, test phiên bản mới | Có |
| Latency | Giảm thời gian phản hồi, nhiều region | Có |
| Failover | Dự phòng, active-passive, DR | Bắt buộc |
| Geolocation | Theo quốc gia / châu lục, chặn vùng, đa ngôn ngữ | Có |
| Geoproximity | Theo khoảng cách + cần bias dịch chuyển traffic | Có |
| IP-based | Theo dải CIDR của client | Có |
| Multi-Value | Trả nhiều IP, chia tải đơn giản có health check | Có |
Latency = "nhanh nhất cho người dùng". Geolocation = "người ở đâu thì vào server nào". Đề nói minimize response time → Latency. Đề nói người ở quốc gia X → Geolocation.
Health Checks
Health check của Route 53 chỉ áp dụng cho tài nguyên công khai, và là nền của cơ chế DNS failover tự động.
Ba loại health check
| Loại | Theo dõi cái gì |
|---|---|
| Endpoint | Một ứng dụng, máy chủ hoặc tài nguyên AWS công khai |
| Calculated Health Check | Các health check khác — gộp kết quả nhiều cái thành một |
| CloudWatch Alarm | Một alarm bất kỳ — cách duy nhất để kiểm tra tài nguyên riêng tư |
Route 53 không có loại health check theo dõi trực tiếp SQS Queue. Muốn theo dõi queue thì tạo CloudWatch Alarm trên metric của nó rồi cho health check theo dõi alarm đó.
Health check trên endpoint — các con số
- Khoảng 15 health checker đặt khắp thế giới cùng kiểm tra.
- Ngưỡng khỏe/không khỏe mặc định là 3 lần.
- Chu kỳ kiểm tra 30 giây, hạ xuống 10 giây được nhưng tốn tiền hơn.
- Giao thức hỗ trợ: HTTP, HTTPS, TCP.
- Nếu trên 18% số health checker báo khỏe thì Route 53 coi là khỏe.
- Chỉ mã trạng thái 2xx và 3xx mới được coi là khỏe.
- Có thể bắt kiểm tra chuỗi văn bản trong 5120 byte đầu của phản hồi.
Phải cấu hình firewall hoặc Security Group cho phép dải IP của Route 53 Health Checkers đi vào. Quên bước này thì endpoint hoàn toàn khỏe mạnh vẫn bị báo unhealthy.
Calculated Health Checks
Gộp kết quả nhiều health check con thành một health check cha, dùng toán tử OR, AND, NOT. Theo dõi được tối đa 256 health check con, và bạn đặt ngưỡng bao nhiêu cái con phải khỏe thì cha mới khỏe.
Hệ thống gồm 5 thành phần, mỗi cái một health check. Khi bảo trì một thành phần phụ, bạn không muốn cả website bị đánh dấu chết và chuyển sang site dự phòng. Dùng Calculated Health Check với quy tắc "ít nhất 4 trong 5 phải khỏe" — bảo trì một cái vẫn an toàn, hỏng từ hai cái trở lên mới kích hoạt failover.
Health check cho tài nguyên riêng tư
Health checker của Route 53 nằm ngoài VPC nên không gọi được endpoint riêng tư hay hệ thống on-premise. Cách vòng: tạo CloudWatch Metric → gắn CloudWatch Alarm → tạo health check theo dõi chính alarm đó.
Tên miền mua ở bên thứ ba
Domain Registrar ≠ DNS Service. Bạn hoàn toàn có thể mua tên miền ở GoDaddy nhưng dùng Route 53 làm nhà cung cấp DNS.
1. Tạo Public Hosted Zone trong Route 53 cho tên miền đó.
2. Route 53 sinh ra 4 Name Server.
3. Vào trang quản lý của bên thứ ba (GoDaddy) và cập nhật NS records trỏ tới 4 name server đó.
Private Hosted Zone — sai, vì nó chỉ phục vụ truy vấn trong VPC, người ngoài Internet không dùng được.
Cập nhật NS records trong Route 53 — sai, vì phải sửa ở bên đăng ký tên miền mới có tác dụng. Route 53 chỉ trả lời khi được ai đó chỉ đến nó.
Map từ khóa & cheat sheet
| Đề nhắc đến… | Nghĩ ngay tới |
|---|---|
| "tên miền gốc trỏ tới ELB / CloudFront" | Alias (CNAME không dùng được ở zone apex) |
| "đổi bản ghi rồi mà người dùng vẫn vào chỗ cũ" | TTL chưa hết hạn |
| "gửi 5% traffic sang phiên bản mới" | Weighted |
| "giảm thời gian phản hồi cho người dùng" | Latency |
| "chỉ người ở quốc gia X được truy cập" | Geolocation (nhớ tạo bản ghi Default) |
| "dịch chuyển traffic giữa hai vị trí bằng bias" | Geoproximity (cần Traffic Flow) |
| "định tuyến theo dải IP của client" | IP-based Routing |
| "site dự phòng khi site chính chết" | Failover (health check bắt buộc) |
| "trả về nhiều IP, chỉ những cái khỏe" | Multi-Value (tối đa 8) |
| "theo dõi tài nguyên riêng tư / on-premise" | CloudWatch Alarm → health check theo dõi alarm |
| "bảo trì một phần mà không làm cả site fail" | Calculated Health Check |
| "mua tên miền ở GoDaddy, dùng Route 53" | Public Hosted Zone + đổi NS ở GoDaddy |
| "tên miền nội bộ chỉ dùng trong VPC" | Private Hosted Zone |
Cheat sheet 60 giây
- Route 53 là DNS + registrar + health check, global, SLA 100%.
- Record: A → IPv4, AAAA → IPv6, CNAME → hostname khác, NS → name server.
- CNAME không dùng được ở zone apex; Alias thì được, lại miễn phí và có health check.
- Alias trỏ tới ELB, CloudFront, API Gateway, Beanstalk, S3 Website, VPC Endpoint, Global Accelerator — không trỏ được tới EC2.
- TTL bắt buộc cho mọi record trừ Alias. Trước khi đổi hạ tầng, hạ TTL trước.
- 8 policy: Simple (không health check) · Weighted (%) · Latency (nhanh nhất) · Failover (health check bắt buộc) · Geolocation (theo vị trí, cần Default) · Geoproximity (bias, cần Traffic Flow) · IP-based (CIDR) · Multi-Value (tối đa 8).
- Health check: endpoint · calculated · CloudWatch alarm. Khoảng 15 checker, ngưỡng 3, chu kỳ 30 giây, chỉ 2xx/3xx là khỏe.
- Tài nguyên riêng tư → chỉ theo dõi được qua CloudWatch Alarm.
- Hosted zone: $0.50/tháng; public cho Internet, private cho VPC.
Sáu câu tự kiểm tra trước khi qua file quiz
1. Muốn trỏ mycompany.com (tên miền gốc) tới một ELB. Dùng record type nào?
2. Ứng dụng ở hai region, muốn người dùng có thời gian phản hồi nhanh nhất. Policy nào?
3. Chỉ cho phép người ở Việt Nam truy cập. Policy nào, và cần lưu ý gì?
4. Policy nào KHÔNG gắn được health check?
5. Muốn theo dõi sức khỏe một database nằm trong private subnet. Làm sao?
6. Mua tên miền ở GoDaddy, muốn dùng Route 53 làm DNS. Cần làm gì?
Đáp án: (1) Alias — CNAME không tạo được ở zone apex. (2) Latency. (3) Geolocation, và bắt buộc tạo bản ghi Default cho các vị trí không khớp. (4) Simple. (5) Health checker nằm ngoài VPC nên không gọi được — tạo CloudWatch Alarm rồi cho health check theo dõi alarm đó. (6) Tạo Public Hosted Zone trong Route 53 rồi cập nhật NS records ở GoDaddy.