Route 53 migration · 16 min read

How to Import DNS Zones from Route 53: A Step-by-Step Migration Guide

Short answer

Learn how to import DNS zones from Route 53 in one step, with a repeatable process for exporting records, validating them, and cutting over nameservers safely.

Learning how to import DNS zones from Route 53 into an independent authoritative DNS provider allows engineering teams to eliminate unexpected query metering and decouple domain management from AWS infrastructure. By exporting standard resource record sets, mapping proprietary constructs, and executing a staged nameserver cutover, you can complete a production DNS migration without dropping a single query.

Whether you manage dozens of microservice domains or large multi-tenant platforms, transitioning off Amazon Route 53 requires careful handling of zone files, AWS-specific routing configurations, and delegation hierarchies. This guide walks through the complete end-to-end execution path for a safe, zero-downtime Route 53 migration using modern tooling and structured validation workflows.

Why Teams Move Off Route 53 (and What Changes)

Amazon Route 53 is a foundational AWS service, but its architectural integration and commercial model create friction as infrastructure topologies diversify across hybrid environments or multi-cloud deployments. Engineering organizations commonly initiate a DNS zone import away from AWS for three operational and financial reasons:

  • Variable and Usage-Based Metering: Under Amazon Route 53 pricing, organizations pay recurring monthly charges per hosted zone alongside metered fees for every DNS query resolved. Distributed denial-of-service (DDoS) spikes, high-frequency service health probes, or traffic surges directly inflate your monthly AWS invoice because hosted zones and queries are billed as discrete, metered units.
  • Operational Weight for Non-AWS Workloads: Teams deploying services onto bare metal, colocation facilities, or competing cloud providers find IAM role chaining, AWS CLI dependencies, and AWS-centric tooling unnecessarily complex for fundamental Internet routing.
  • Predictable Budgeting: DNSCove uses fixed-cost pricing rather than per-zone or per-query metering. Switching to a predictable tier removes query billing volatility entirely, which simplifies forecasting for platforms operating thousands of active hostnames. You can inspect the tiers directly on the DNSCove pricing page.

When migrating authoritative DNS, your foundational record types remain fully portable. Standard authoritative records—such as A, AAAA, CNAME, MX, TXT, NS, SRV, and CAA—adhere to standard DNS specifications and function consistently across compliant nameserver platforms. DNS resolvers do not know or care which software powers your authoritative zone, provided the responses conform to standard wire formats.

However, specific operational paradigms change fundamentally. DNSCove does not expose a Route 53 wire-compatible API in v1; you manage DNS through DNSCove's own JSON API, console, and Terraform guides, and migrate off Route 53 with a one-step zone import. Furthermore, DNSCove serves standard authoritative records and does not offer GeoDNS, weighted, latency-based, or failover traffic steering in v1. Complex routing-policy records must be identified and refactored into application load balancers, edge CDNs, or reverse proxies prior to initiating nameserver cutover.

Prerequisites and Pre-Migration Inventory

Thorough discovery prevents accidental service outages during a Route 53 migration. Before touching zone files or records, audit your AWS account to inventory all public zones, external dependencies, and proprietary configurations.

1. Verify IAM Permissions

To inspect and export your zones, confirm your AWS IAM identity has the necessary read-only permissions for Route 53. The following IAM policy statement provides sufficient privilege to list hosted zones and export their record sets without granting write access:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Route53ReadOnlyExport",
      "Effect": "Allow",
      "Action": [
        "route53:ListHostedZones",
        "route53:ListHostedZonesByName",
        "route53:ListResourceRecordSets",
        "route53:GetHostedZone"
      ],
      "Resource": "*"
    }
  ]
}

2. Map Public vs. Private Hosted Zones

Route 53 allows you to create public hosted zones (resolved via the global Internet) and private hosted zones (associated with specific AWS Virtual Private Clouds). Only public hosted zones can be delegated to public authoritative nameservers. Run the following AWS CLI command to enumerate your public zones:

aws route53 list-hosted-zones \
  --query "HostedZones[?Config.PrivateZone==\`false\`].[Id, Name, ResourceRecordSetCount]" \
  --output table

If you maintain internal split-horizon records inside private hosted zones, those configurations must remain within your internal network infrastructure. Customer zones are delegated to the shared ns1.dnscove.com / ns2.dnscove.org nameservers; per-customer vanity or white-label nameservers are not supported in v1.

3. Identify Non-Standard Record Configurations

As documented in the AWS Route 53 Developer Guide — Supported DNS Record Types, AWS offers proprietary Alias records that point directly to AWS resources (CloudFront distributions, Application Load Balancers, S3 website buckets) without issuing a canonical CNAME. Alias records are internal Route 53 pointers rather than standard DNS records.

You must also flag any records using advanced policies. As detailed in the AWS Route 53 Developer Guide — Routing Policies, features like weighted distribution, latency-based routing, failover checks, and geolocation steering require external architectural support if your target authoritative engine serves standard DNS.

4. Review Record TTLs and Staging Hierarchy

Examine existing Time to Live (TTL) values across your records. High TTL values (e.g., 86400 seconds / 24 hours) mean intermediate caching resolvers will retain historical data longer if you introduce changes during the cutover window. Lowering TTLs on critical service records to 300 seconds several days prior to cutover provides operational flexibility.

Platform teams often plan migration sequencing conservatively: begin with low-impact or staging domains (such as staging-app.net or an internal administrative domain) to validate deployment scripts and verification queries before touching production root domains.

How to Import DNS Zones from Route 53: The One-Step Import

Understanding how to import DNS zones from Route 53 cleanly involves exporting your records into an RFC-compliant zone file and passing that data to the target control plane. DNSCove simplifies this process using a unified one-step ingestion pipeline.

Step 1: Export Records from Route 53

Route 53 does not provide an explicit "Export to BIND" button in the AWS Management Console for large environments, but you can dump record sets programmatically via the AWS CLI and format them into standard master zone file syntax. You can fetch raw JSON records using:

aws route53 list-resource-record-sets \
  --hosted-zone-id Z10041234EXAMPLE \
  --output json > zone_records.json

Alternatively, open-source utilities like cli53 allow you to export directly to a standard BIND-compatible zone file:

cli53 export example.com > example.com.zone

A typical BIND zone file representing standard services and an apex record looks like this:

$ORIGIN example.com.
$TTL 3600
@       IN SOA ns1.dnscove.com. hostmaster.example.com. (
                2026092801 ; serial
                7200       ; refresh
                3600       ; retry
                1209600    ; expire
                300 )      ; minimum

; Base web service
@       IN A     192.0.2.1
www     IN CNAME example.com.

; Mail exchange records
@       IN MX 10 mail.example.com.
@       IN MX 20 mail2.example.com.

; Verification and security policies
@       IN TXT   "v=spf1 include:_spf.example.com ~all"
_dmarc  IN TXT   "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
@       IN CAA   0 issue "letsencrypt.org"

Step 2: Ingest the Zone via the One-Step Importer

Once you have your zone file or record collection prepared, navigate to the DNSCove console or execute a migration call via the REST API. Review our comprehensive Route 53 migration documentation for comprehensive payload specifications and authentication patterns.

  1. Initialize Zone Creation: In the DNSCove Console, select Add Zone and enter your fully qualified domain name (e.g., example.com).
  2. Upload or Paste Zone File: Paste the exported BIND zone text directly into the import parser window or submit the file payload.
  3. Standard authoritative records—such as A, AAAA, CNAME, MX, TXT, NS, SRV, and CAA—adhere to standard DNS specifications and function consistently across compliant nameserver platforms. Any Route many Alias record targeting the apex domain is automatically flagged for conversion to an apex ALIAS configuration.
  4. Examine Warnings: If your export contained proprietary routing rules, the importer highlights them as unsupported attributes rather than silently dropping or misinterpreting the entries.
  5. Commit Import: Click Confirm and Ingest. The records are staged immediately across DNSCove's authoritative infrastructure, ready to answer queries as soon as delegation occurs.

For large-scale architectures requiring bulk automation, review the detailed strategies outlined in our guide on DNS zone import best practices.

Validating the Imported Zone Before You Cut Over

According to standard DNS migration practices outlined in RFC 1035, engineering teams should verify that their populated authoritative nameservers answer authoritatively and accurately for every record type before modifying parent delegation at the domain registrar. A structured testing routine ensures zero customer impact.

1. Direct Query Verification

Use diagnostic tools like dig or drill to query the target nameserver directly, bypassing public caching resolvers. Target the authoritative servers assigned to your account:

# Query the apex A record directly
dig @ns1.dnscove.com example.com A +noall +answer

# Query the CNAME record
dig @ns1.dnscove.com www.example.com CNAME +noall +answer

# Query mail and security records
dig @ns1.dnscove.com example.com MX +noall +answer
dig @ns1.dnscove.com example.com TXT +noall +answer
dig @ns1.dnscove.com example.com CAA +noall +answer

Compare the returned resource records against responses returned by your active Route 53 nameserver:

dig @ns-1234.awsdns-01.org example.com A +noall +answer

The IP addresses, priorities, and string values should align precisely. To maintain rigorous operational safety across large deployments, follow our comprehensive DNS zone file audit checklist before altering nameservers.

2. Verify Apex ALIAS Behavior

When mapping an apex domain pointing to a content delivery network or load balancer hostname, standard CNAME records cannot be used at the zone apex due to RFC constraints. DNSCove supports apex ALIAS records (CNAME-at-apex flattening, like Route53 Alias) with serve-stale protection. Confirm that querying the root domain yields flattened A/AAAA answers directly:

dig @ns1.dnscove.com example.com A +noall +answer
;; ANSWER SECTION:
example.com.   300   IN   A   151.101.1.140
example.com.   300   IN   A   151.101.65.140

3. Verify DNSSEC Signing Pipeline

If you intend to enforce cryptographic validation on your zone, inspect the signing parameters. DNSCove signs zones with DNSSEC using Algorithm 13 (ECDSA P-256/SHA-256), NSEC3 with RFC 9276 parameters (0 iterations, no salt), and CDS/CDNSKEY published per RFC 7344/8078 for registrar automation. Zone signing keys are held in the control plane under AWS KMS and are never present on the authoritative nameservers. Signatures are refreshed automatically before expiry. Zone-signing keys roll automatically on a 90-day pre-publish schedule, which requires nothing from the customer. The key-signing key is rolled on operator demand rather than on a schedule, because a KSK roll requires a DS change at the registrar.

The parameter choices strictly follow modern operational standards. The Internet Engineering Task Force specifies in RFC 9276 — Guidance for NSEC3 Parameter Settings that zero iterations and empty salt minimize compute overhead on validating resolvers while preventing denial-of-service vectors. You can query the DNSKEY records directly:

dig @ns1.dnscove.com example.com DNSKEY +noall +answer

Cutting Over Nameservers Without Downtime

Transitioning authoritative delegation from Route 53 requires a disciplined execution plan. Because DNS is an eventually consistent, distributed caching hierarchy, nameserver records propagate gradually as existing resolver caches expire.

Nameserver Cutover Sequence

  1. Stage 1: Lower the Registrar NS TTL: If your domain registrar permits setting an explicit TTL on parent NS delegations, lower it to 300 seconds at least 48 hours before the cutover.
  2. Stage 2: Double-Check Record Parity: Confirm that all issued records (such as freshly provisioned TLS verification tokens or updated MX pointers) are synchronized between Route 53 and DNSCove.
  3. Stage 3: Update Registrar Nameserver Delegation: Log in to your domain registrar (e.g., Amazon Registrar, Cloudflare Registrar, Namecheap, or MarkMonitor) and replace the Route 53 nameserver addresses. Customer zones are delegated to the shared ns1.dnscove.com / ns2.dnscove.org nameservers; per-customer vanity or white-label nameservers are not supported in v1. Keep in mind that DNSCove runs two unicast authoritative nameservers (ns1 in NYC, ns2 in Frankfurt), not an anycast network.
  4. Stage 4: Monitor Propagation Across Global Resolvers: Track resolution across diverse vantage points. Recursive resolvers around the globe will gradually replace the cached AWS nameservers with the new delegations as the parent zone's NS TTL expires:
    dig @1.1.1.1 example.com NS +noall +answer
    dig @8.8.8.8 example.com NS +noall +answer
    dig @9.9.9.9 example.com NS +noall +answer
  5. Stage 5: Maintain the Route 53 Zone in a Frozen State: Do not delete the Route 53 hosted zone immediately. Keep it running and unaltered for at least 7 days. Stale recursive resolvers or misconfigured internal clients that do not honor TTLs will continue to query the old nameservers during this transition window.
  6. Stage 6: Execute Instant Rollback if Necessary: If unexpected edge-case issues emerge during cutover, reverting the change requires only a single operation: updating the registrar nameserver records back to the Route 53 delegation set. Because the Route many zone remains untouched and active, traffic will seamlessly revert without configuration rebuilds.

Handling Records That Do Not Map One-to-One

When executing a Route 53 migration, cloud engineers often discover proprietary constructs embedded inside AWS environments. Identifying these configurations early enables you to build effective, standards-based alternatives.

AWS Alias Records

Route 53 allows creating an Alias record for subdomains (such as api.example.com pointing to an Application Load Balancer). In standard DNS, subdomains pointing to an external domain name should simply use a canonical CNAME record:

; Route 53 ALB alias converted to standard CNAME
api.example.com.   300   IN   CNAME   my-alb-123456789.us-east-1.elb.amazonaws.com.

For the zone apex (example.com), where a CNAME would violate RFC 1035 by coexisting with SOA and NS records, leverage DNSCove's native apex ALIAS flattening mechanism. The control plane resolves the target A and AAAA records on an ongoing basis and serves them directly as synthesised address responses.

Traffic Routing Policies and Health Checks

AWS Route many allows users to bind health checks to DNS records and configure weighted, latency-based, or geolocation policies directly within the nameserver. DNSCove serves standard authoritative records and does not offer GeoDNS, weighted, latency-based, or failover traffic steering in v1. To preserve high availability and multi-region traffic distribution, move this logic to your application edge or ingress layer:

  • Multi-Region Ingress: Deploy an external Anycast-routed reverse proxy, a CloudFront distribution, or an external load balancing solution that performs Layer 7 health checking and traffic steering upstream.
  • Application-Layer Failover: Use health probes inside an ingress controller or edge gateway to route traffic across surviving origin servers rather than relying on authoritative DNS mutations.

DNSSEC Transitions

If your zone was previously signed within Route 53, migrating delegation without updating the Delegation Signer (DS) record at the parent zone will cause strict validating resolvers to mark your domain as SERVFAIL. Follow this precise transition order:

  1. Remove the existing DS record from your domain registrar.
  2. Wait for the parent zone DS TTL to expire completely (typically 24 to 48 hours depending on the TLD registry).
  3. Perform the nameserver delegation cutover to DNSCove.
  4. Enable DNSSEC signing in DNSCove with one click.
  5. Publish the generated DS record at your registrar. If your registrar supports RFC 7344 / RFC 8078, DNSCove publishes automated CDS and CDNSKEY records so the parent zone can update the delegation signer automatically without manual dashboard intervention.

According to RFC 7344 — Automating DNSSEC Delegation Trust Maintenance, child zones publish CDS (Child DS) and CDNSKEY (Child DNSKEY) resource records to signal parent registries that trust anchors can be updated safely.

Private Hosted Zones and Split Horizons

Private hosted zones in Route 53 resolve exclusively within authorized VPCs via Amazon Provided DNS (the .2 resolver). DNSCove does not offer AXFR zone transfer or secondary-DNS operation in v1. If internal microservices require internal split-horizon resolution, keep those private records within AWS Route 53 private hosted zones or internal DNS forwarders (such as CoreDNS or Unbound), and only delegate the public, Internet-facing zone to DNSCove.

Automating Future Zone Imports with Terraform and CI

Once you complete an initial DNS zone import, managing your records manually through a user interface introduces human error. The recommended workflow is to capture your imported records as Infrastructure as Code (IaC) using Terraform.

Review the official DNSCove Terraform guide for comprehensive provider configurations, authentication options, and complete resource arguments.

Step 1: Declare the Zone in Terraform

Define the target zone inside your Terraform configuration files:

terraform {
  required_providers {
    dnscove = {
      source  = "dnscove/dnscove"
      version = "~> 1.0"
    }
  }
}

provider "dnscove" {
  api_token = var.dnscove_api_token
}

resource "dnscove_zone" "primary" {
  name        = "example.com"
  description = "Production primary zone migrated from Route 53"
}

resource "dnscove_record" "apex_alias" {
  zone_id = dnscove_zone.primary.id
  name    = "@"
  type    = "ALIAS"
  value   = "d111111abcdef8.cloudfront.net."
  ttl     = 300
}

resource "dnscove_record" "api" {
  zone_id = dnscove_zone.primary.id
  name    = "api"
  type    = "CNAME"
  value   = "lb-ingress.example.internal."
  ttl     = 300
}

Step 2: Import Existing State

Rather than destroying or duplicating records created during the one-step web import, import the staged zone directly into your Terraform state file:

# Import the zone resource
terraform import dnscove_zone.primary example.com

# Import individual records using the composite identifier
terraform import dnscove_record.apex_alias example.com_@_ALIAS
terraform import dnscove_record.api example.com_api_CNAME

Step 3: Continuous Integration Zone Audits

To prevent syntax errors, invalid SPF definitions, or dangling records from reaching production, integrate validation checks into your continuous integration (CI) pipeline. Run zone-linter tooling and dry-run Terraform plans on pull requests:

name: Validate DNS Configuration
on:
  pull_request:
    paths:
      - 'terraform/dns/**'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: hashicorp/setup-terraform@v3
      - name: Terraform Format Check
        run: terraform fmt -check
      - name: Terraform Validate
        run: terraform validate
      - name: Terraform Plan
        env:
          DNSCOVE_API_TOKEN: ${{ secrets.DNSCOVE_API_TOKEN }}
        run: terraform plan -no-color

Post-Migration Checklist and Ongoing Operations

Completing a nameserver transition requires post-cutover verification and housekeeping. Execute this checklist within 30 days of migration:

Verification Task Validation Method Success Criteria
Nameserver Delegation whois example.com or registry query Registrar shows ns1.dnscove.com and ns2.dnscove.org
DNSSEC Authenticity dig +dnssec @8.8.8.8 example.com SOA Response carries ad flag and valid RRSIG
Apex Resolution dig example.com A +short Returns valid flattened IPv4 address set
Mail Exchangers dig example.com MX +short Returns primary and backup mail gateway priorities
Route 53 Decommission AWS Billing Console Unused public hosted zone deleted; recurring monthly hosted zone fees reclaimed per AWS Route 53 pricing documentation

To decommission your old Route 53 zone after the 30-day stability window, ensure you have an archived backup of the original zone records, then execute:

aws route53 delete-hosted-zone --id Z10041234EXAMPLE

If the hosted zone still contains non-default records, Route 53 will reject the deletion request. You must delete the non-default resource record sets before deleting the hosted zone itself.

Frequently Asked Questions

Can I import a Route 53 zone file directly into DNSCove?

Yes. You can export your Route 53 resource record sets into a standard BIND-compatible zone file format and paste or upload it into DNSCove's one-step zone importer. The importer parses standard record types, flags Route many Alias configurations for conversion, and generates an instant staging preview before committing the zone.

What happens to Route 53 Alias records during import?

Route 53 Alias records pointing to the domain apex are converted to DNSCove apex ALIAS records with automatic flattening and serve-stale protection. For subdomains pointing to external hostnames (such as load balancers or CloudFront distributions), the importer converts them to standard RFC-compliant CNAME records.

Will DNS queries drop during the nameserver migration?

No. When executed following a staged cutover sequence, migrating off Route 53 causes zero downtime. By populating and verifying records on the target authoritative nameservers prior to updating your registrar delegation, resolvers will seamlessly transition from the old nameservers to the new ones as cached records expire.

How long should I keep the Route 53 hosted zone active after cutover?

You should keep the Route 53 hosted zone active and unmodified for at least 7 to 14 days after updating your registrar delegation. This accommodates intermediate resolvers that do not honor short TTLs and provides an immediate rollback path if verification checks encounter unforeseen edge cases.

Route 53 migrationDNS zone importmanaged authoritative DNSDevOpsSREcloud infrastructure

Straight answer: DNSSEC signing isn't available yet — it's on the roadmap. Everything else here works today. Authoritative nameservers: ns1.dnscove.com, ns2.dnscove.org.

Point your domain at DNSCove in minutes.

Flat-price, edge-served authoritative DNS with apex ALIAS to any target. Sign in with a magic link — no password, no credit card, no AWS account.