CNAME không hoạt động với apex domain, nhưng 90% developer mới dùng Route 53 mắc lỗi này. Mình từng mất cả buổi tối vì dùng CNAME cho myapp.com thay vì ALIAS record. Route 53 làm 3 việc: domain registration (mua domain), DNS hosting (quản lý record), và health check + routing (điều hướng traffic thông minh). Tên “Route 53” đến từ port 53 — DNS port.
flowchart TB
User["User: myapp.com"]
Route53["Route 53 Hosted Zone"]
ALB["ALB (ALIAS A)<br/>EvaluateTargetHealth: true"]
CF["CloudFront (ALIAS A)"]
Failover["Failover: Primary → Secondary<br/>health check HTTPS /health mỗi 30s"]
Latency["Latency-based: user → region gần nhất"]
User --> Route53
Route53 --> ALB
Route53 --> CF
Route53 --> Failover
Route53 --> Latency
ALIAS vs CNAME
| ALIAS | CNAME | |
|---|---|---|
| Apex domain | Có (myapp.com) | Không |
| AWS resource? | Có, kể cả ở zone apex | Có, nhưng không dùng được ở zone apex |
| Query cost | Miễn phí | Standard |
| TTL | 60s (auto) | Tùy chỉnh |
aws route53 change-resource-record-sets --hosted-zone-id Zxxx --change-batch '{
"Changes": [{"Action": "CREATE", "ResourceRecordSet": {
"Name": "myapp.com", "Type": "A",
"AliasTarget": {
"HostedZoneId": "Z1LMS91P8CMLE5",
"DNSName": "dualstack.myapp-alb-xxx.elb.amazonaws.com",
"EvaluateTargetHealth": true
}
}}]
}'
EvaluateTargetHealth: true — Route 53 kiểm tra health status của ALB (resource được trỏ đến). Nếu ALB unhealthy, DNS không trả về IP của ALB đó. Lưu ý: EvaluateTargetHealth chỉ check trạng thái của ALB endpoint, không check từng target (instance/container) riêng lẻ phía sau ALB — việc đó là nhiệm vụ của ALB target group health check.
Routing Policies
Failover: Primary/Secondary + Health Check
# Health check endpoint HTTPS
aws route53 create-health-check --caller-reference $(date +%s) --health-check-config '{
"Type": "HTTPS", "ResourcePath": "/health", "Port": 443,
"RequestInterval": 30, "FailureThreshold": 3
}'
# Primary record + Secondary record (failover khi primary fail 3 lần)
Latency-based: user → region gần nhất
Tạo record cùng tên ở nhiều region. Route 53 tự route user đến region có latency thấp nhất từ vị trí DNS resolver của user.
Geolocation: user Việt Nam → Singapore
Route user từ Việt Nam đến ap-southeast-1, user từ Europe đến eu-west-1, default cho phần còn lại.
DNS Firewall
aws route53resolver create-firewall-domain-list --name blocked
aws route53resolver update-firewall-domains \
--firewall-domain-list-id rfd-xxx --operation ADD --domains "malware.example.com"
aws route53resolver create-firewall-rule \
--firewall-domain-list-id rfd-xxx --firewall-rule-group-id rfg-xxx \
--name block --priority 100 --action BLOCK
Điều cần nhớ
- ALIAS cho AWS resource, CNAME cho external — ALIAS miễn phí, auto-update IP
- Failover + health check HTTPS /health — primary fail → secondary sau 3 lần thất bại
- Latency-based cho global app, Geolocation cho regional compliance
- DNS Firewall — chặn domain độc hại ở tầng DNS