Route 53 Diagnostics
When to use
Any Route 53 investigation where the console alone is insufficient — DNS resolution debugging, health check analysis, routing policy troubleshooting, private hosted zone issues, Resolver endpoint configuration, domain registration and transfer problems, DNSSEC issues, or integration with CloudFront/ELB.
Investigation workflow
Step 1 — Collect and triage
aws route53 list-hosted-zones
aws route53 list-hosted-zones-by-name --dns-name <domain-name>
aws route53 get-hosted-zone --id <hosted-zone-id>
aws route53 list-resource-record-sets --hosted-zone-id <hosted-zone-id>
aws route53 test-dns-answer --hosted-zone-id <hosted-zone-id> --record-name <name> --record-type <type>
dig <domain-name> @8.8.8.8
dig <domain-name> @ns-xxx.awsdns-xx.com
nslookup <domain-name>
Step 2 — Domain deep dive
aws route53 get-health-check-status --health-check-id <health-check-id>
aws route53 list-health-checks
aws route53 get-health-check --health-check-id <health-check-id>
aws route53 list-resource-record-sets --hosted-zone-id <hosted-zone-id> --query "ResourceRecordSets[?Type=='A']"
aws route53 get-hosted-zone-count
aws route53domains get-domain-detail --domain-name <domain-name>
aws route53resolver list-resolver-endpoints
aws route53resolver list-resolver-rules
Step 3 — Detailed investigation
aws route53 get-dnssec --hosted-zone-id <hosted-zone-id>
aws route53 get-change --id <change-id>
aws route53resolver get-resolver-endpoint --resolver-endpoint-id <endpoint-id>
aws route53resolver list-resolver-endpoint-ip-addresses --resolver-endpoint-id <endpoint-id>
aws ec2 describe-vpcs --vpc-ids <vpc-id> --query 'Vpcs[*].{Id:VpcId,DnsHostnames:EnableDnsHostnames,DnsSupport:EnableDnsSupport}'
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventSource,AttributeValue=route53.amazonaws.com --max-results 10
aws cloudwatch get-metric-statistics --namespace AWS/Route53 --metric-name HealthCheckStatus --dimensions Name=HealthCheckId,Value=<health-check-id> --start-time <start> --end-time <end> --period 60 --statistics Minimum
aws cloudwatch get-metric-statistics --namespace AWS/Route53 --metric-name DNSQueries --dimensions Name=HostedZoneId,Value=<hosted-zone-id> --start-time <start> --end-time <end> --period 3600 --statistics Sum
Read references/route53-guardrails.md before concluding on any Route 53 issue.
Tool quick reference
| Tool / API |
When to use |
list-hosted-zones |
List all hosted zones in the account |
get-hosted-zone |
Hosted zone details including NS records and VPC associations |
list-resource-record-sets |
All DNS records in a hosted zone |
test-dns-answer |
Simulate Route 53 DNS response (authoritative answer) |
get-health-check-status |
Current health check status from all regions |
get-health-check |
Health check configuration details |
list-health-checks |
All health checks in the account |
get-dnssec |
DNSSEC signing status for a hosted zone |
get-change |
Status of a pending change batch (PENDING or INSYNC) |
route53domains get-domain-detail |
Domain registration details and transfer lock |
route53resolver list-resolver-endpoints |
Resolver inbound/outbound endpoints |
route53resolver list-resolver-rules |
Resolver forwarding rules |
dig |
External DNS resolution testing |
nslookup |
Basic DNS lookup |
Gotchas: Route 53
- Alias vs CNAME: Alias records are free (no query charges for alias to AWS resources), work at the zone apex (example.com), and are resolved server-side by Route 53. CNAME records CANNOT be created at the zone apex (RFC violation), incur standard query charges, and add an extra DNS lookup. Always prefer alias for AWS resources.
version: "1.0.0"
last_updated: "2025-04-12"
- Health check evaluation: Standard health checks evaluate every 30 seconds. Fast health checks evaluate every 10 seconds (higher cost). Health checkers run from multiple AWS regions simultaneously. A health check is considered healthy when the configured threshold of regions report healthy (default 3 of 8+).
- Failover routing requires health checks: Failover routing policies MUST have health checks associated with the primary record. Without a health check, Route 53 always returns the primary record and never fails over. The secondary record health check is optional but recommended.
- Private hosted zones require VPC association AND enableDnsHostnames + enableDnsSupport: A private hosted zone must be associated with a VPC, AND the VPC must have both enableDnsHostnames and enableDnsSupport set to true. Missing either setting causes resolution failures silently.
- Split-horizon DNS: You can have the same domain name in both a public and private hosted zone. Instances in the associated VPC resolve the private zone; external clients resolve the public zone. This is intentional but can cause confusion during debugging.
- TTL caching means changes aren't instant: DNS resolvers cache responses for the TTL duration. Even after Route 53 propagates a change (typically 60 seconds), clients may see stale data until their cached TTL expires. Lower TTL before planned changes, then raise it after.
- DNSSEC signing vs validation: Route 53 supports DNSSEC signing for public hosted zones (you enable it). DNSSEC validation is done by resolvers (e.g., Route 53 Resolver can validate). Signing and validation are separate concerns. Enabling signing requires creating a KSK and establishing a chain of trust with the parent zone.
- Route 53 Resolver endpoints: Inbound endpoints allow on-premises DNS resolvers to forward queries TO Route 53 Resolver. Outbound endpoints allow Route 53 Resolver to forward queries TO on-premises or other DNS resolvers. Each endpoint requires at least 2 IP addresses in different AZs.
- Weighted routing zero-weight behavior: A record with weight 0 receives NO traffic UNLESS all records in the group have weight 0, in which case traffic is distributed equally among all weight-0 records. This is useful for testing — set weight to 0 to stop traffic, or set all to 0 for equal distribution.
- Geolocation vs geoproximity vs latency routing: Geolocation routes based on the geographic location of the user (continent/country/state). Geoproximity routes based on geographic distance with optional bias. Latency-based routes to the region with lowest network latency. Geolocation has a mandatory default record for unmatched locations.
- NS record delegation: When delegating a subdomain to a different hosted zone, create NS records in the parent zone pointing to the child zone's name servers. The NS records in the child zone are authoritative. Mismatched NS records between parent and child cause resolution failures.
- Domain transfer lock: Domains have a transfer lock by default. You must disable the transfer lock AND get an authorization code to transfer a domain. Some TLDs have additional requirements. Transfers can take up to 10 days. Recently registered or transferred domains have a 60-day lock.
- Route 53 is a global service: The Route 53 API endpoint is in us-east-1. Health checks, hosted zones, and domain registration are global resources. CloudWatch metrics for health checks are in us-east-1. Always use --region us-east-1 for CloudWatch health check metrics.
Anti-hallucination rules
- Always cite specific hosted zone configurations, record sets, health check statuses, or dig/nslookup output as evidence.
- CNAME records CANNOT exist at the zone apex. Never suggest creating a CNAME at the zone apex — use an alias record instead.
- DNS changes are NOT instant for end users. Even after Route 53 propagates (INSYNC), resolvers cache for the TTL duration. Never claim changes are immediately visible to all clients.
- Failover routing REQUIRES a health check on the primary record. Never suggest failover routing without configuring a health check.
- Private hosted zones require BOTH VPC association AND enableDnsHostnames + enableDnsSupport on the VPC. Never troubleshoot private zone resolution without checking all three.
- Spend no more than 2 minutes on any single hypothesis. Pivot if inconclusive.
30 runbooks
| Category |
IDs |
Covers |
| A — DNS Resolution |
A1-A4 |
Resolution failures, propagation delays, NXDOMAIN, SERVFAIL |
| B — Health Checks |
B1-B3 |
False positives, health check configuration, calculated health checks |
| C — Routing Policies |
C1-C4 |
Failover not triggering, weighted distribution, geolocation, latency-based |
| D — Private Hosted Zones |
D1-D3 |
VPC association, split-horizon, Resolver rules |
| E — Resolver |
E1-E3 |
Inbound endpoint issues, outbound forwarding, DNSSEC validation |
| F — Domain Management |
F1-F3 |
Transfer failures, registration issues, delegation |
| G — Records |
G1-G3 |
Alias vs CNAME, record creation errors, TTL issues |
| H — Integration |
H1-H2 |
CloudFront, ELB alias records |
| Z — Catch-All |
Z1 |
General troubleshooting |
1---2name: route53-diagnostics3description: Use this skill to investigate and troubleshoot Amazon Route 53 problems by analyzing hosted zones, DNS records, health checks, routing policies, Resolver endpoints, domain registration, and following structured runbooks. Activate when: DNS resolution failures, propagation delays, NXDOMAIN errors, SERVFAIL responses, health check false positives, failover not triggering, weighted routing imbalance, geolocation routing issues, latency-based routing problems, private hosted zone resolution failures, split-horizon DNS issues, Resolver endpoint failures, DNSSEC validation errors, domain transfer failures, alias vs CNAME confusion, TTL caching issues, CloudFront or ELB alias record problems, NS delegation issues, or the user says something is wrong with Route 53 or DNS without naming specific symptoms.4---56# Route 53 Diagnostics78## When to use910Any Route 53 investigation where the console alone is insufficient — DNS resolution debugging, health check analysis, routing policy troubleshooting, private hosted zone issues, Resolver endpoint configuration, domain registration and transfer problems, DNSSEC issues, or integration with CloudFront/ELB.1112## Investigation workflow1314### Step 1 — Collect and triage1516```17aws route53 list-hosted-zones18aws route53 list-hosted-zones-by-name --dns-name <domain-name>19aws route53 get-hosted-zone --id <hosted-zone-id>20aws route53 list-resource-record-sets --hosted-zone-id <hosted-zone-id>21aws route53 test-dns-answer --hosted-zone-id <hosted-zone-id> --record-name <name> --record-type <type>22dig <domain-name> @8.8.8.823dig <domain-name> @ns-xxx.awsdns-xx.com24nslookup <domain-name>25```2627### Step 2 — Domain deep dive2829```30aws route53 get-health-check-status --health-check-id <health-check-id>31aws route53 list-health-checks32aws route53 get-health-check --health-check-id <health-check-id>33aws route53 list-resource-record-sets --hosted-zone-id <hosted-zone-id> --query "ResourceRecordSets[?Type=='A']"34aws route53 get-hosted-zone-count35aws route53domains get-domain-detail --domain-name <domain-name>36aws route53resolver list-resolver-endpoints37aws route53resolver list-resolver-rules38```3940### Step 3 — Detailed investigation4142```43aws route53 get-dnssec --hosted-zone-id <hosted-zone-id>44aws route53 get-change --id <change-id>45aws route53resolver get-resolver-endpoint --resolver-endpoint-id <endpoint-id>46aws route53resolver list-resolver-endpoint-ip-addresses --resolver-endpoint-id <endpoint-id>47aws ec2 describe-vpcs --vpc-ids <vpc-id> --query 'Vpcs[*].{Id:VpcId,DnsHostnames:EnableDnsHostnames,DnsSupport:EnableDnsSupport}'48aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventSource,AttributeValue=route53.amazonaws.com --max-results 1049aws cloudwatch get-metric-statistics --namespace AWS/Route53 --metric-name HealthCheckStatus --dimensions Name=HealthCheckId,Value=<health-check-id> --start-time <start> --end-time <end> --period 60 --statistics Minimum50aws cloudwatch get-metric-statistics --namespace AWS/Route53 --metric-name DNSQueries --dimensions Name=HostedZoneId,Value=<hosted-zone-id> --start-time <start> --end-time <end> --period 3600 --statistics Sum51```5253Read `references/route53-guardrails.md` before concluding on any Route 53 issue.5455## Tool quick reference5657| Tool / API | When to use |58|------------|-------------|59| `list-hosted-zones` | List all hosted zones in the account |60| `get-hosted-zone` | Hosted zone details including NS records and VPC associations |61| `list-resource-record-sets` | All DNS records in a hosted zone |62| `test-dns-answer` | Simulate Route 53 DNS response (authoritative answer) |63| `get-health-check-status` | Current health check status from all regions |64| `get-health-check` | Health check configuration details |65| `list-health-checks` | All health checks in the account |66| `get-dnssec` | DNSSEC signing status for a hosted zone |67| `get-change` | Status of a pending change batch (PENDING or INSYNC) |68| `route53domains get-domain-detail` | Domain registration details and transfer lock |69| `route53resolver list-resolver-endpoints` | Resolver inbound/outbound endpoints |70| `route53resolver list-resolver-rules` | Resolver forwarding rules |71| `dig` | External DNS resolution testing |72| `nslookup` | Basic DNS lookup |7374## Gotchas: Route 537576- Alias vs CNAME: Alias records are free (no query charges for alias to AWS resources), work at the zone apex (example.com), and are resolved server-side by Route 53. CNAME records CANNOT be created at the zone apex (RFC violation), incur standard query charges, and add an extra DNS lookup. Always prefer alias for AWS resources.77version: "1.0.0"78last_updated: "2025-04-12"79- Health check evaluation: Standard health checks evaluate every 30 seconds. Fast health checks evaluate every 10 seconds (higher cost). Health checkers run from multiple AWS regions simultaneously. A health check is considered healthy when the configured threshold of regions report healthy (default 3 of 8+).80- Failover routing requires health checks: Failover routing policies MUST have health checks associated with the primary record. Without a health check, Route 53 always returns the primary record and never fails over. The secondary record health check is optional but recommended.81- Private hosted zones require VPC association AND enableDnsHostnames + enableDnsSupport: A private hosted zone must be associated with a VPC, AND the VPC must have both enableDnsHostnames and enableDnsSupport set to true. Missing either setting causes resolution failures silently.82- Split-horizon DNS: You can have the same domain name in both a public and private hosted zone. Instances in the associated VPC resolve the private zone; external clients resolve the public zone. This is intentional but can cause confusion during debugging.83- TTL caching means changes aren't instant: DNS resolvers cache responses for the TTL duration. Even after Route 53 propagates a change (typically 60 seconds), clients may see stale data until their cached TTL expires. Lower TTL before planned changes, then raise it after.84- DNSSEC signing vs validation: Route 53 supports DNSSEC signing for public hosted zones (you enable it). DNSSEC validation is done by resolvers (e.g., Route 53 Resolver can validate). Signing and validation are separate concerns. Enabling signing requires creating a KSK and establishing a chain of trust with the parent zone.85- Route 53 Resolver endpoints: Inbound endpoints allow on-premises DNS resolvers to forward queries TO Route 53 Resolver. Outbound endpoints allow Route 53 Resolver to forward queries TO on-premises or other DNS resolvers. Each endpoint requires at least 2 IP addresses in different AZs.86- Weighted routing zero-weight behavior: A record with weight 0 receives NO traffic UNLESS all records in the group have weight 0, in which case traffic is distributed equally among all weight-0 records. This is useful for testing — set weight to 0 to stop traffic, or set all to 0 for equal distribution.87- Geolocation vs geoproximity vs latency routing: Geolocation routes based on the geographic location of the user (continent/country/state). Geoproximity routes based on geographic distance with optional bias. Latency-based routes to the region with lowest network latency. Geolocation has a mandatory default record for unmatched locations.88- NS record delegation: When delegating a subdomain to a different hosted zone, create NS records in the parent zone pointing to the child zone's name servers. The NS records in the child zone are authoritative. Mismatched NS records between parent and child cause resolution failures.89- Domain transfer lock: Domains have a transfer lock by default. You must disable the transfer lock AND get an authorization code to transfer a domain. Some TLDs have additional requirements. Transfers can take up to 10 days. Recently registered or transferred domains have a 60-day lock.90- Route 53 is a global service: The Route 53 API endpoint is in us-east-1. Health checks, hosted zones, and domain registration are global resources. CloudWatch metrics for health checks are in us-east-1. Always use --region us-east-1 for CloudWatch health check metrics.9192## Anti-hallucination rules93941. Always cite specific hosted zone configurations, record sets, health check statuses, or dig/nslookup output as evidence.952. CNAME records CANNOT exist at the zone apex. Never suggest creating a CNAME at the zone apex — use an alias record instead.963. DNS changes are NOT instant for end users. Even after Route 53 propagates (INSYNC), resolvers cache for the TTL duration. Never claim changes are immediately visible to all clients.974. Failover routing REQUIRES a health check on the primary record. Never suggest failover routing without configuring a health check.985. Private hosted zones require BOTH VPC association AND enableDnsHostnames + enableDnsSupport on the VPC. Never troubleshoot private zone resolution without checking all three.996. Spend no more than 2 minutes on any single hypothesis. Pivot if inconclusive.100101## 30 runbooks102103| Category | IDs | Covers |104|----------|-----|--------|105| A — DNS Resolution | A1-A4 | Resolution failures, propagation delays, NXDOMAIN, SERVFAIL |106| B — Health Checks | B1-B3 | False positives, health check configuration, calculated health checks |107| C — Routing Policies | C1-C4 | Failover not triggering, weighted distribution, geolocation, latency-based |108| D — Private Hosted Zones | D1-D3 | VPC association, split-horizon, Resolver rules |109| E — Resolver | E1-E3 | Inbound endpoint issues, outbound forwarding, DNSSEC validation |110| F — Domain Management | F1-F3 | Transfer failures, registration issues, delegation |111| G — Records | G1-G3 | Alias vs CNAME, record creation errors, TTL issues |112| H — Integration | H1-H2 | CloudFront, ELB alias records |113| Z — Catch-All | Z1 | General troubleshooting |