Skip to main content

npmctl-route53

AWS Route 53 DNS provider plugin for npmctl

Extend npmctl with Route 53-backed DNS record management for declarative workflows, provider discovery, and DNS-aware automation.

PyPI version Python versions CI SSOT governed Apache 2.0 License

npmctl-route53 package hits npmctl-route53 downloads

npmctl architecture infographic

npmctl-route53 is the AWS Route 53 DNS provider package for npmctl. Install it when you want desired-state DNS records or DNS diagnostics to resolve through Route 53 instead of using only the base npmctl package.

Supported Python Versions

npmctl-route53 supports Python 3.10, 3.11, 3.12, 3.13, and 3.14.

Why npmctl-route53

  • Adds Route 53 DNS provider discovery to npmctl
  • Lets DNS workflows live beside proxy and certificate desired state
  • Keeps AWS DNS dependencies out of the core CLI package
  • Supports operator diagnostics through npmctl dns doctor
  • Provides client helpers for Route 53 DNS change-batch workflows

FAQ

What is npmctl-route53?

Answer: npmctl-route53 is a plugin package that teaches npmctl how to talk to AWS Route 53 through boto3 for DNS record operations and DNS provider diagnostics.

When do I need npmctl-route53?

Answer: You need npmctl-route53 when your npmctl workflow includes Route 53 hosted-zone DNS records or when you want npmctl to validate Route 53 DNS connectivity and credentials.

Does npmctl-route53 work without npmctl?

Answer: No. npmctl-route53 is an extension package for npmctl, not a standalone CLI.

Can npmctl-route53 set DNS records?

Answer: Yes. The Route 53 provider supports declarative A, AAAA, CNAME, TXT, MX, SRV, and CAA writes through ChangeResourceRecordSets. MX records require priority.

What credentials are required?

Answer: Route 53 access uses the standard AWS credential chain or ROUTE53_PROFILE. Diagnostics require hosted-zone and record-set list permissions; mutation helpers require route53:ChangeResourceRecordSets.

Install

Install the base CLI and the Route 53 provider package together:

pipx install npmctl
pipx inject npmctl npmctl-route53
npmctl plugins list

With uv:

uv tool install npmctl
uv tool install npmctl-route53
npmctl plugins list

Inside a virtual environment:

python -m venv .venv
. .venv/bin/activate
python -m pip install npmctl npmctl-route53
npmctl plugins list

Configure Route 53

Use the standard AWS credential chain:

export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...

Or use a named profile:

export AWS_PROFILE=production-dns

Optional package-specific override:

export ROUTE53_PROFILE=production-dns

Verify Plugin Discovery

Check that npmctl can discover the provider:

npmctl plugins list
npmctl dns doctor --provider route53

Minimal DNS Workflow

Once the provider is installed and configured, npmctl can validate, plan, apply, or diagnose Route 53-backed DNS behavior through the base CLI:

npmctl validate desired-state/dns.yaml
npmctl plan desired-state/dns.yaml --owner site-a
npmctl apply desired-state/dns.yaml --owner site-a
npmctl dns providers
npmctl dns zones --provider route53
npmctl dns records --provider route53 --zone example.com

Route 53 API Surface

The provider follows the AWS Route 53 API through boto3:

  • ListHostedZones: discover hosted zones.
  • ListResourceRecordSets: list records in one hosted zone.
  • ChangeResourceRecordSets with CREATE: create record sets.
  • ChangeResourceRecordSets with UPSERT: create or update record sets.
  • ChangeResourceRecordSets with DELETE: delete record sets.

Required IAM actions for diagnostics:

  • route53:ListHostedZones
  • route53:ListResourceRecordSets

Required IAM action for mutation helpers:

  • route53:ChangeResourceRecordSets

Programmatic Record Operations

from npmctl_route53 import Route53Client, Route53Config

client = Route53Client(Route53Config.from_env())
client.create_record("example.com", type="A", name="www", value="192.0.2.10", ttl=300)
client.upsert_record("example.com", type="CNAME", name="app", value="target.example.net", ttl=300)
client.upsert_record("example.com", type="MX", name="@", value="mail.example.com", ttl=300, priority=10)
client.delete_record("example.com", type="A", name="www", value="192.0.2.10", ttl=300)

Safety Notes

  • Route 53 changes are hosted-zone scoped. Confirm the selected hosted zone before mutation.
  • Prefer IAM policies scoped to the intended hosted zone ARN.
  • UPSERT can overwrite live DNS answers. Use create-only workflows when adoption is not explicit.
  • Use npmctl owner metadata for desired DNS records so apply remains owner-scoped.

More Documentation

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

npmctl_route53-0.4.1.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

npmctl_route53-0.4.1-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file npmctl_route53-0.4.1.tar.gz.

File metadata

  • Download URL: npmctl_route53-0.4.1.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for npmctl_route53-0.4.1.tar.gz
Algorithm Hash digest
SHA256 8ebcf075270e24d745b247832c671b333e0c1092e339c933a7c09d04816e2ed9
MD5 5235eae3721bcd0ce332cbedf8dc2bb9
BLAKE2b-256 f3e92bb84142ad05799602a26bc444e13ecc985976f310fe8e4a0b1a2823999f

See more details on using hashes here.

File details

Details for the file npmctl_route53-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: npmctl_route53-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for npmctl_route53-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 987ff6f88c198beec56d3f199b3445c8242f6330856d82d7100d2d873e7760ec
MD5 c6b261153395a61b590e71cfce68a4b3
BLAKE2b-256 abb7f9d68fa240e025bec4669e3bf0700a7909f18bb1facf47a6d0637d15fdec

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 files

0.3.10

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page