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

ALIASCNAME
Apex domainCó (myapp.com)Không
AWS resource?Có, kể cả ở zone apexCó, nhưng không dùng được ở zone apex
Query costMiễn phíStandard
TTL60s (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

Bài sau: Phần 15: CloudFront + ACM — CDN & TLS thực hành