Back to posts
May 8, 2026
11 min read

Route 53: The “Free Load Balancer” You Already Have

Recommendation: If you’re not yet familiar with how DNS works — resolvers, authoritative servers, record types, TTL — read the How DNS Works Under the Hood article first. This article will be much easier to follow once you have that foundation.

Are you paying $16/month for an ALB just to distribute traffic between two A/B testing environments? Or considering setting up another Load Balancer in a different region for Disaster Recovery?

Here’s some good news: you already have a “Load Balancer” in hand — and you’re likely paying $0.50/month for it without fully leveraging it. That’s Amazon Route 53.

At its core, Route 53 is a DNS service — or more precisely, an authoritative DNS server combined with a domain registrar. If you’ve ever purchased a domain on Namecheap, GoDaddy, or used Cloudflare DNS — Route 53 plays a similar role: it’s where you manage your domain and configure DNS records (A, CNAME, MX, …). It’s also just a DNS like any other: receives queries, looks up records, returns IPs.

But the key difference: while Namecheap or GoDaddy mostly return IPs in a “rigid” manner — whatever record exists returns that exact IP — Route 53 can make decisions based on weights, geographic location, network latency, or server health before choosing which IP to return. Cloudflare also has similar features (Load Balancing, geo-steering), but those are separate paid plans — with Route 53, these routing policies are already included in the base cost.

At that point, DNS is no longer just a phone book — it becomes a load balancer.

Route 53 provides 8 routing policies that let you turn DNS resolution into different traffic distribution strategies: from A/B testing, canary releases, blue/green deployments to multi-region failover. All at the DNS layer — no additional infrastructure needed, no code changes required.


1. Why Is Route 53 a “Load Balancer”?

Most engineers think of Load Balancers as ALB or NLB — services operating at Layer 4/7, sitting between client and server to distribute requests. But Route 53 operates at the DNS layer — much earlier in the request lifecycle.

The core difference:

This means Route 53 can’t do what ALB does (path-based routing, SSL termination, sticky sessions). But conversely, there are problems that Route 53 solves more simply, cheaply, and at a global scope — something a single ALB cannot.

Every Hosted Zone on Route 53 is already a Load Balancer waiting to be configured. You just need to choose the right routing policy.


2. Route 53’s 8 Load Balancing “Modes”

Routing PolicyHow it worksWhen to use
SimpleReturns 1 (or multiple) values, no logicDev/staging, simple setup
WeightedSplits traffic by weight ratioA/B testing, canary, blue/green
LatencyPicks the region with lowest latencyGlobal apps, UX optimization
FailoverPrimary/Secondary, auto-switches on failureDisaster Recovery
GeolocationRoutes by country/continentRegional content, compliance
GeoproximityRoutes by distance + biasExpand/shrink serving areas
Multivalue AnswerReturns up to 8 healthy IPsBasic client-side LB
IP-basedRoutes by client CIDRInternal/external traffic routing

Let’s dive deep into each policy:

2.1 Simple Routing — “Default, no thinking needed”

This is the default mode when you create a record on Route 53. One domain points to one (or multiple) IPs. If there are multiple IPs, Route 53 returns them all in random order — similar to DNS round-robin.

Limitation: No health checks. If a server dies, Route 53 will happily continue returning that IP.

Configuration on AWS Console:

Record nameTypeRouting policyValueTTL
app.example.comASimple10.0.1.100, 10.0.2.100300

When to use? Dev/staging environments, or when you only have a single endpoint.

2.2 Weighted Routing — “Splitting the pie by percentage”

This is the star of this article. Weighted Routing lets you assign weights to each record, and Route 53 distributes traffic proportionally.

Example: you need to split traffic for api.example.com between Production (80%) and Canary (20%). You create 2 records with the same name with routing policy = Weighted:

Record nameTypeRouting policyValueWeightSet IDTTLHealth check
api.example.comAWeighted10.0.1.10080production-v160(optional)
api.example.comAWeighted10.0.2.10020canary-v260(optional)

Result: 80% of DNS queries return the Production IP, 20% return the Canary IP. It’s that simple.

Formula for calculating percentage:

% traffic = Weight of record / Sum of all weights

If you set a weight of 0 for a record, Route 53 will stop sending traffic to it — extremely useful when you need to “disable” an endpoint without deleting the record.

Tip: Weights don’t have to add up to 100. Route 53 calculates the ratio automatically. Weights of 3 and 7 produce the same result as 30 and 70.

2.3 Latency-based Routing — “Whoever’s closer gets the call”

Route 53 maintains a data table of network latency between AWS regions and user locations. When receiving a DNS query, it returns the IP in the region with the lowest latency.

Unlike Geolocation (which routes by hard geographic boundaries), Latency-based routing cares about actual speed. A user in Vietnam might be routed to Tokyo instead of Singapore if the connection to Tokyo is faster at that moment.

Record nameTypeRouting policyValueRegionSet IDTTLHealth check
app.example.comALatency10.0.1.100ap-southeast-1singapore60hc-singapore
app.example.comALatency10.0.2.100ap-northeast-1tokyo60hc-tokyo
app.example.comALatency10.0.3.100us-east-1virginia60hc-virginia

Users in Vietnam will automatically be routed to Singapore or Tokyo — whichever region has lower latency at the time of the query.

When to use? Global applications that need to optimize response time for users in multiple regions.

2.4 Failover Routing — “Disaster defense”

Failover routing operates on an Active-Passive model: you designate a Primary and a Secondary record. Route 53 continuously checks the Primary’s health via health checks. When the Primary “falls”, traffic automatically switches to the Secondary.

Record nameTypeRouting policyFailover typeValueSet IDTTLHealth check
app.example.comAFailoverPrimary10.0.1.100primary-us-east-160hc-primary (required)
app.example.comAFailoverSecondary10.0.2.100secondary-eu-west-160hc-secondary (recommended)

Health Check configuration for Primary:

ProtocolEndpointPortPathRequest intervalFailure threshold
HTTPS10.0.1.100443/health30 seconds3

With a health check interval of 30 seconds and a threshold of 3 failures, Route 53 detects failures within approximately 60-90 seconds. Combined with a low TTL (60s), most clients will switch to the backup endpoint within 2-3 minutes.

When to use? Disaster Recovery, active-passive setup between regions.

2.5 Geolocation & Geoproximity — “Vietnamese users see Vietnamese servers”

Geolocation routes by hard geographic boundaries: country, state, or continent. Users in Vietnam → Singapore server. Users in Germany → Frankfurt server. No exceptions.

Record nameTypeRouting policyLocationValueSet IDTTL
app.example.comAGeolocationVietnam10.0.1.100 (Singapore)vietnam-to-sg300
app.example.comAGeolocationEurope10.0.2.100 (Frankfurt)europe-to-fra300
app.example.comAGeolocationDefault10.0.3.100 (US)default-us300

Important: Always create a Default record — otherwise, users in countries that aren’t mapped will receive an NXDOMAIN response (domain not found).

Geoproximity is more sophisticated: it routes by physical distance but adds a bias parameter that lets you “expand” or “shrink” a resource’s serving area. Set a positive bias to expand — useful when a region has spare capacity and you want it to absorb traffic from neighboring areas.

Record nameTypeRouting policyRegionValueBiasSet ID
app.example.comAGeoproximityap-southeast-110.0.1.100+25 (expand)singapore
app.example.comAGeoproximityap-northeast-110.0.2.1000 (default)tokyo

With a bias of +25 for Singapore, Singapore’s serving area “expands” — attracting more traffic from neighboring regions that would normally route to Tokyo.

When to use? Geolocation for compliance (GDPR, data residency). Geoproximity for flexible load optimization.

2.6 Multivalue Answer — “Round-robin with health awareness”

Like Simple Routing but with health checks. Route 53 returns up to 8 healthy IPs per query. The client randomly picks one IP to connect to.

Unlike Simple Routing: if a server dies, Route 53 removes that IP from the returned list. This is the most basic form of client-side load balancing.

You create multiple separate records, each pointing to an IP with a health check attached:

RecordValueSet IDHealth check
app.example.com10.0.1.100server-1hc-server-1
app.example.com10.0.1.101server-2hc-server-2
app.example.com10.0.1.102server-3hc-server-3
app.example.com10.0.1.103server-4hc-server-4

All have Routing policy = Multivalue answer, TTL = 60. When server-2 goes down and its health check fails, Route 53 automatically removes 10.0.1.101 from the response — clients only receive the 3 remaining IPs.

Note: Multivalue Answer is not a replacement for ALB/NLB. It’s only suitable for simple systems that need a health check layer at the DNS level.

2.7 IP-based Routing — “Know where the client comes from”

Routes based on the client IP address’s CIDR block. You define a mapping table: which IP range → which endpoint.

Step 1: Create a CIDR collection and CIDR blocks on Route 53:

CIDR CollectionCIDR BlockLocation Name
my-company10.0.0.0/8internal-network
my-company203.0.113.0/24isp-a
my-company198.51.100.0/24isp-b

Step 2: Create records with IP-based routing:

Record nameTypeRouting policyCIDR locationValueSet IDTTL
api.example.comAIP-basedinternal-network10.0.1.100internal60
api.example.comAIP-basedisp-a10.0.2.100isp-a60
api.example.comAIP-basedDefault10.0.3.100default60

Traffic from internal company IP ranges (10.0.0.0/8) routes to the internal API, ISP-A routes to the nearest CDN, and the rest routes to the default endpoint.

When to use? Enterprise traffic routing, ISP-based optimization, or blocking traffic from specific IP ranges.


3. Real-world Scenarios — 3 Common Use Cases

3.1 A/B Testing with Weighted Routing

Want to test a new API version on 20% of users? Create two weighted records:

Record nameTypeRouting policyValueWeightSet IDTTL
api.example.comAWeighted10.0.1.10080production-v160
api.example.comAWeighted10.0.2.10020canary-v260

Then gradually change the weights following a canary roadmap:

  1. Start: Weight 95/5 — only 5% traffic to the new version
  2. Observe: Monitor error rate, latency for 30 minutes
  3. Increase gradually: 80/20 → 50/50 → 20/80
  4. Complete: 0/100 — fully switch to the new version

Important: Set a low TTL (60s) so weight changes take effect quickly. A high TTL means clients will cache the old IP longer.

3.2 Blue/Green Deployment

Blue/Green is simpler than canary: two environments, instant switch.

Step 1: Both environments are ready. Traffic is 100% on Blue.

Record nameTypeRouting policyValueWeightSet IDTTL
app.example.comAWeighted10.0.1.50 (Blue)100blue60
app.example.comAWeighted10.0.2.50 (Green)0green60

Step 2: Flip — set Blue weight to 0, Green weight to 100.

Record nameTypeRouting policyValueWeightSet IDTTL
app.example.comAWeighted10.0.1.50 (Blue)0blue60
app.example.comAWeighted10.0.2.50 (Green)100green60

Step 3: If issues arise, flip back in seconds. Rollback is just a weight change.

Comparison: Blue/Green with Route 53 doesn’t require creating additional ALBs or Target Groups. Just change DNS records — zero infrastructure overhead.

3.3 Multi-Region DR with Failover + Latency

An advanced scenario: combining two routing policies using Alias records.

Layer 1 — Latency routing for internal.example.com (selects the nearest region):

Record nameTypeRouting policyValueRegionSet IDTTLHealth check
internal.example.comA (Alias)LatencyALB us-east-1us-east-1us-east60hc-us-east
internal.example.comA (Alias)LatencyALB eu-west-1eu-west-1eu-west60hc-eu-west

Layer 2 — Failover routing for app.example.com (DR when both primary regions go down):

Record nameTypeRouting policyFailover typeValueSet IDTTLHealth check
app.example.comA (Alias)FailoverPrimaryinternal.example.comprimary60hc-primary
app.example.comA (Alias)FailoverSecondaryALB ap-southeast-1dr-singapore60hc-dr

When both us-east-1 and eu-west-1 are operational: users are routed to the nearest region (via the Latency layer). When both “fall”: traffic automatically switches to the DR site in Singapore (via the Failover layer).


4. Limitations — When Route 53 Is NOT a Load Balancer

Route 53 is powerful, but not a silver bullet. Understanding the limits helps you avoid misuse:

Principle: If you need decisions based on request content → use ALB. If you just need to decide where to send the user before connecting → Route 53 is sufficient.


5. Route 53 vs ALB vs NLB — “The Golden Triangle”

If you’ve read the ALB or NLB article, this is the final piece to complete the picture:

CriteriaRoute 53ALBNLB
Operating layerDNS (before connection)Layer 7 (HTTP)Layer 4 (TCP/UDP)
Base cost~$0.50/zone/month~$16/month~$16/month
GranularityPer DNS queryPer HTTP requestPer TCP connection
Health checkYes (charged separately)Built-inBuilt-in
Sticky sessionNoYesYes
SSL terminationNoYesYes (TLS)
Path-based routingNoYesNo
Weighted trafficYesYes (target group)No
Failover speedMinutes (TTL)SecondsSeconds
ScopeGlobalRegionalRegional

6. Combining Route 53 + ALB — “The Perfect Combo”

In practice, Route 53 and ALB/NLB don’t exclude each other — they complement each other at two different layers.

The classic model:

With this architecture:

This is the model that most large-scale production systems use — and the Route 53 cost in this combo is virtually negligible compared to ALB.


Final words

Route 53 isn’t a replacement for ALB or NLB — it’s a supplementary layer that many teams overlook. At $0.50/month per hosted zone, you get:

The “golden triangle” for load balancing on AWS: Route 53 for global steering, ALB for smart routing, NLB for raw speed. Knowing when to use each one — that’s the real skill.

What scenarios are you using Route 53 for? Share below!

Related