AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides comprehensive domain expertise for managing Amazon Route 53 DNS configurations. It acts as a router to specific, self-contained procedures for tasks ranging from basic public DNS record creation to complex hybrid network resolution, traffic steering, and security-focused DNS Firewall management. It emphasizes best practices for IAM security, DNS transport encryption, and scalable configuration management across multi-account environments.
What it does
- Maps hostnames to IPs, AWS resources, or other hostnames via public DNS records.
- Implements traffic-steering policies like weighted routing and failover for disaster recovery.
- Configures health checks to monitor endpoint availability and trigger alerts.
- Secures VPC traffic by blocking malicious domains using DNS Firewall.
- Centralizes DNS configurations and security rules across multiple accounts using Route 53 Profiles or Firewall Manager.
- Enables hybrid network resolution and manages VPC Resolver configurations for Outposts.
When to use it
- When you need to point a domain or subdomain to an AWS resource or external IP.
- When implementing blue/green deployments or canary releases using weighted routing.
- When setting up high-availability architectures requiring cross-region failover.
- When you need to filter malicious DNS queries within a VPC.
- When managing DNS configurations at scale across an AWS Organization.
- When resolving private DNS queries between on-premises networks and AWS VPCs.
Advantages
- Provides structured, step-by-step procedures for complex DNS tasks.
- Includes critical security constraints for IAM and DNS transport.
- Offers clear decision frameworks for choosing between routing policies or centralization methods.
- Ensures consistent configuration by routing to specialized, self-contained reference files.
- Supports both sandboxed execution via AWS MCP and standard AWS CLI fallback.
Usage examples
- “How do I point my domain example.com to an S3 bucket?”
- The agent will guide you through the 'creating a public DNS record' procedure to map your domain to the S3 bucket endpoint.
- “I need to block known malicious domains for all my VPCs.”
- The agent will direct you to the 'centralizing DNS Firewall' procedure to deploy protection across your organization.
- “How can I fail over traffic between two regions?”
- The agent will provide the 'configuring failover routing' steps, including setting up the necessary health checks.
- “How do I resolve private DNS between my on-premises network and AWS?”
- The agent will walk you through the 'resolving private DNS for hybrid networks' procedure.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/aws/route53/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip route53.zip -d .agents/skills
Documentation by AWS
Amazon Route 53
Overview
Domain expertise for configuring Amazon Route 53 DNS across the public and private resolution paths: hosted zone records, traffic-steering routing policies, health checks, DNS Firewall, Route 53 Profiles, VPC Resolver (also known as Route 53 Resolver) for hybrid and Outposts networks, and Global Resolver.
This skill is a router. Each customer task maps to a procedure file under references/. Read the
matching reference in full before acting, then follow its constraints and steps. The reference
files are self-contained: each carries its own decision tables, constraints, procedure, and
troubleshooting.
Execute commands using the AWS MCP server when connected (sandboxed execution, audit logging,
observability). Fall back to the AWS CLI otherwise. All Route 53 Domains API calls are made in
us-east-1 regardless of where the customer works.
Which Route 53 task do you need?
| Goal | Reference |
|---|---|
| Point a hostname or zone apex at an IP, AWS resource, or hostname | creating a public DNS record |
| Split traffic across endpoints in a ratio (blue/green, canary, A/B) | splitting traffic with weighted routing |
| Fail over between two Regions for disaster recovery | configuring failover routing |
| Monitor whether an endpoint is up and get alerted | setting up a health check |
| Block malicious domains for a VPC at the resolver | blocking malicious domains |
| Work out which DNS Firewall rule wins for a domain across multiple rule groups | identifying the effective DNS Firewall rule |
| Apply one DNS config across many VPCs and accounts | configuring Route 53 Profiles |
| Fan DNS Firewall out across many accounts org-wide | centralizing DNS Firewall with Profiles |
| Resolve private DNS both ways across a hybrid network | resolving private DNS for hybrid networks |
| Run VPC Resolver locally on an AWS Outposts rack | running VPC Resolver on Outposts |
| Give on-premises and remote clients one anycast DNS endpoint | setting up Global Resolver |
Routing notes
Records vs routing policies. A plain hostname-to-target mapping is the public DNS record task. Splitting or steering traffic (weighted, failover) is a separate routing-policy task with its own reference. Start from the customer's intent, not the record type.
Health checks vs failover. A health check monitors an endpoint and raises alarms. The failover routing policy decides where traffic goes when a check fails. They are two references and are often used together: set up the health check, then wire it into failover.
DNS Firewall for one VPC vs many accounts. Authoring rules for a VPC is the blocking reference. Fanning the same protection across accounts with Profiles and Firewall Manager is the centralizing reference.
DNS Firewall authoring vs diagnosis. Creating or changing rules is the blocking reference. Working out which rule already wins for a domain when several rule groups are associated (a read and diagnostic task) is the identifying-the-effective-rule reference.
Profiles, two entry points. General Profile setup (attach resources, share via RAM, cost and visibility tradeoffs) is the configuring-Profiles reference. Using Profiles specifically to scale DNS Firewall org-wide is the centralizing reference.
VPC Resolver, three contexts. In-Region hybrid resolution, the Outposts-local resolver, and the Global Resolver anycast endpoint are three separate references. Match the reference to where the resolver runs.
Cross-service work
Pointing a custom domain at a CloudFront distribution, or failing over between CloudFront distributions, is cross-service work spanning Route 53 and CloudFront. Use this skill for the Route 53 side of pure-Route 53 tasks only.
Security Considerations
These apply across the Route 53 tasks below; each reference repeats the ones load-bearing for its workflow.
You SHOULD use least-privilege IAM credentials provisioned through IAM roles (instance profiles, SSO/IAM Identity Center session credentials, or
aws sts assume-role) rather than long-lived IAM user access keys, and prefer read-only credentials for inspection steps.You SHOULD recommend encrypted DNS transport (DoT or DoH) over plaintext Do53 for resolver client populations, since Do53 exposes queried domain names to on-path observers.
You MUST scope resolver-endpoint security group rules on port 53 to the on-premises CIDR ranges or known DNS server IPs, never
0.0.0.0/0.You MUST encrypt query log and notification destinations at rest: KMS on CloudWatch Logs log groups, SSE-S3/SSE-KMS on S3 buckets, server-side encryption (SSE) on a Data Firehose stream, and SSE on SNS topics, because DNS query logs and health-check notifications can reveal infrastructure topology.
For Global Resolver, you MUST treat access-token
valuereturned at create time as a secret; store it in AWS Secrets Manager rather than in plaintext, and validate which client populations each DNS view authorizes.
Additional Resources
Files
- ATTRIBUTION.mdAdded by AutoGineer925 B
- LICENSELicence file added by AutoGineer9.9 KiB
- NOTICELicence file added by AutoGineer67 B
- SKILL.md6.4 KiB
- references/blocking-malicious-domains.md20.7 KiB
- references/centralizing-dns-firewall.md17.3 KiB
- references/configuring-failover-routing.md15.1 KiB
- references/configuring-route53-profiles.md15.4 KiB
- references/creating-a-public-dns-record.md12.9 KiB
- references/identifying-the-effective-dns-firewall-rule.md15.1 KiB
- references/resolving-private-dns-for-hybrid-networks.md15.3 KiB
- references/running-route53-resolver-on-outposts.md10.5 KiB
- references/setting-up-a-route53-health-check.md11.2 KiB
- references/setting-up-route53-global-resolver.md25.5 KiB
- references/splitting-traffic-with-weighted-routing.md10.7 KiB
references/creating-a-public-dns-record.md
Creating a Public DNS Record in Route 53
Overview
Domain expertise for adding or updating a record in a Route 53 public hosted zone so a hostname resolves to a target: an IP address, an AWS resource, or another hostname. Covers the choice between alias and standard records, the zone apex (root domain) constraint, long TXT value handling, and the Evaluate Target Health (ETH) toggle on alias records.
Does not cover routing policies that split or steer traffic (weighted, failover, latency, geolocation), private hosted zones for hybrid networks, domain registration, or health check creation. Those are separate skills.
Execute commands using the AWS MCP server when connected (sandboxed execution, audit logging, observability). Fall back to the AWS CLI otherwise.
Table of Contents
Overview
Workflow
Decision: alias vs standard record
The apex constraint
Long TXT records
Decision: Evaluate Target Health on an alias record
Troubleshooting
Procedure
Additional Resources
Workflow
To create or update a public DNS record, follow the procedure exactly. See the Procedure section below.
The procedure covers:
Choosing alias vs standard record for the target
Pointing a subdomain or the zone apex at an AWS resource
Adding a long TXT record by splitting it into 255-character chunks
Surfacing the console link to verify the record
Decision: alias vs standard record
| Choice | Use when |
|---|---|
| Alias (A or AAAA) | The target is a supported AWS resource, or the record is at the zone apex. Free to query, tracks the target's IP changes, inherits the target's TTL |
| Standard (A, AAAA, CNAME) | The target is a non-AWS hostname or IP, or the customer needs explicit TTL control. CNAME only on a subdomain, never at the apex |
Constraints:
You MUST use an alias record, not a standard A or CNAME, whenever the target is an AWS resource that supports it. A standard record pointed at an AWS-issued hostname goes stale when the target's IPs rotate
You MUST match the alias record type to the target's address family: type A for IPv4, type AAAA for IPv6
You MUST NOT set a manual TTL on an alias record; it inherits the target's TTL
The console "Create record" alias target picker is the authoritative list of supported alias targets (broader than the public docs, which commonly omit Network Load Balancer, VPC Lattice, and VPC endpoint targets). The CLI and SDK accept the same set without listing it
The apex constraint
A CNAME cannot exist at the zone apex (example.com). RFC 1034 prohibits a CNAME alongside the
Start of Authority (SOA) and name server (NS) records that always exist at the apex, so Route 53
rejects the create.
Constraints:
You MUST use an alias record to point an apex at an AWS resource or at another record in the same hosted zone. It works at the apex because it resolves to address records, not to a CNAME
Long TXT records
A single TXT string is capped at 255 characters by the DNS protocol. A longer value (commonly a DomainKeys Identified Mail, DKIM, public key) must be split into multiple quoted strings in the same record; Route 53 concatenates them when answering.
Constraints:
You MUST split a TXT value longer than 255 characters into multiple quoted 255-character chunks automatically rather than asking the customer to do it
Decision: Evaluate Target Health on an alias record
ETH only changes behavior when the record participates in a health-aware routing setup (failover, weighted, latency). For a standalone record pointing at a single target it has no practical effect.
Constraints:
You SHOULD set ETH on only when the record participates in a routing policy, and leave it off for a plain single-target record. The full ETH-versus-custom-health-check decision belongs to the health check and failover skills
Troubleshooting
Create rejected at the apex
A CNAME was attempted at the zone apex (prohibited by RFC 1034). Use an alias record at the apex.
Hostname resolves to a stale IP
A standard record points at an AWS hostname whose IPs rotated. Replace it with an alias record, which tracks the target's IPs.
TXT create rejected or value truncated
A single TXT string exceeded 255 characters. Split the value into multiple quoted 255-character strings in one record.
Alias record will not accept a TTL
Alias records inherit the target's TTL. Remove the manual TTL.
Alias record type mismatch error
The record type does not match the target address family. Use type A for IPv4, type AAAA for IPv6.
Procedure
Overview
This procedure adds or updates a record in a Route 53 public hosted zone so a hostname resolves to a target: an IP, an AWS resource, or another hostname. It chooses alias vs standard records, handles the zone apex constraint and long TXT values, and surfaces the console link to verify.
Parameters
hosted_zone_id (required): The public hosted zone ID (e.g.,
Z1234567890ABC).record_name (required): The record name (e.g.,
www.example.comor the apexexample.com).record_type (required):
A,AAAA,CNAME,TXT, etc.is_alias (required): Whether this is an alias record. Selects which of the two mutually exclusive parameter groups below applies. Inferred as
truewhen the target is a supported AWS resource (at any level, including the apex), or when the record is at the zone apex AND a CNAME was requested (a CNAME is prohibited at the apex, so an alias is the substitute). A plain A or AAAA record at the apex pointing to a non-AWS IP address is NOT an alias — leaveis_aliasfalsein that case.
Provide exactly one of the following groups, based on is_alias:
Alias record (is_alias = true) — provide an alias target:
alias_target_dns_name (required): DNS name of the AWS resource or the in-zone record to point at (e.g.,
my-alb-123456789.us-east-1.elb.amazonaws.com).alias_target_zone_id (required): The hosted zone ID of the alias target. This is NOT the record's own
hosted_zone_id. Resolve it by target type:CloudFront → always
Z2FDTNDATAQYW2ELB (ALB/NLB) → the target's
CanonicalHostedZoneId(aws elbv2 describe-load-balancers)CLB → the target's
CanonicalHostedZoneNameID(aws elb describe-load-balancers)S3 website endpoint, API Gateway, and other AWS resources → the region-specific zone ID from the service's documentation or the console alias target picker
Another record in the same hosted zone → reuse
hosted_zone_id
evaluate_target_health (optional, default
false): The ETH toggle. Leavefalsefor a plain single-target record (see the ETH decision section).
Standard record (is_alias = false) — provide records and a TTL:
records (required): One or more resource record values (an IP, a hostname, or quoted TXT strings).
ttl (required): TTL in seconds. Not valid on alias records.
Constraints for parameter acquisition:
You MUST ask for all required parameters upfront in a single prompt
You MUST confirm the hosted zone is public before writing
You MUST validate the record name falls within the hosted zone's domain
Steps
1. Verify dependencies
Constraints:
You MUST confirm credentials with
aws sts get-caller-identityYou MUST REQUIRE provisioning credentials through ephemeral mechanisms (IAM roles via instance profiles, SSO/IAM Identity Center session credentials, or
aws sts assume-role) rather than long-lived IAM user access keys.You MUST enable Route 53 query logging to an encrypted destination where applicable, ensure CloudTrail is enabled to audit changes, and set CloudWatch alarms on health-check status where health checks are involved.
You MUST confirm the hosted zone exists and is public:
aws route53 get-hosted-zone --id {hosted_zone_id} --region us-east-1
2. Choose alias vs standard record
Constraints:
You MUST use an alias record when the target is a supported AWS resource, or when the record is at the zone apex AND a CNAME was requested (a CNAME is prohibited at the apex). A plain A or AAAA record at the apex pointing to a non-AWS IP address is a standard record, NOT an alias
You MUST match the alias record type to the target's address family (A for IPv4, AAAA for IPv6)
You MUST NOT set a TTL on an alias record
You MUST treat the console "Create record" alias target picker as the authoritative list of supported alias targets
3. Handle the apex constraint
Constraints:
If the record is at the zone apex and a CNAME was requested, you MUST switch to an alias record. A CNAME at the apex is rejected (RFC 1034)
4. Handle long TXT values
Constraints:
If
record_typeis TXT and the value exceeds 255 characters, you MUST split it into multiple quoted 255-character strings within the same record
5. Create or update the record
Constraints:
You MUST use
UPSERTto create or update the record. For an alias record:aws route53 change-resource-record-sets --hosted-zone-id {hosted_zone_id} --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "{record_name}", "Type": "{record_type}", "AliasTarget": { "DNSName": "{alias_target_dns_name}", "EvaluateTargetHealth": {evaluate_target_health}, "HostedZoneId": "{alias_target_zone_id}" } } }] }'For a standard record, replace
AliasTargetwithTTL({ttl}) andResourceRecords(fromrecords)You MUST capture the change ID from the response
6. Confirm and surface the console link
Constraints:
You MUST verify the change reaches
INSYNC. The status starts asPENDINGand propagation can take up to ~60 seconds, so poll rather than expectingINSYNCon the first call:aws route53 get-change --id {change_id}You SHOULD treat
PENDINGas in-progress, not a failure; only surface an error if the status has not reachedINSYNCafter a reasonable polling windowYou MUST present the records view console link, filling
{hostedZoneId}:https://console.aws.amazon.com/route53/v2/hostedzones#ListRecordSets/{hostedZoneId}
Example
Example input
{
"hosted_zone_id": "Z1234567890ABC",
"record_name": "example.com",
"record_type": "A",
"is_alias": true,
"alias_target_dns_name": "my-alb-123456789.us-east-1.elb.amazonaws.com",
"alias_target_zone_id": "Z35SXDOTRQ7X7K"
}Example output
Created alias A record example.com -> my-alb-123456789.us-east-1.elb.amazonaws.com
Verify in the console:
https://console.aws.amazon.com/route53/v2/hostedzones#ListRecordSets/Z1234567890ABCTroubleshooting
Create rejected at the apex
CNAME attempted at the zone apex. Use an alias record (Step 3).
Hostname resolves to a stale IP
Standard record pointed at an AWS hostname whose IPs rotated. Replace with an alias record (Step 2).
TXT create rejected or value truncated
A single TXT string exceeded 255 characters. Split into quoted 255-character strings (Step 4).
Alias record will not accept a TTL
Alias records inherit the target's TTL. Remove the TTL.
Security Considerations
You SHOULD use least-privilege IAM credentials provisioned through ephemeral mechanisms (IAM roles, SSO/IAM Identity Center session credentials, or
aws sts assume-role) rather than long-lived IAM user access keys, and prefer read-only credentials for inspection steps. Grant only the specific actions this procedure needs —route53:ChangeResourceRecordSetsandroute53:GetChangeto create the record and confirm propagation, plusroute53:ListResourceRecordSetsandroute53:GetHostedZonefor inspection — rather thanroute53:*or broaderservice:*wildcards.You MUST enable Route 53 query logging to an encrypted destination (KMS on CloudWatch Logs, SSE-S3/SSE-KMS on S3, or server-side encryption on a Data Firehose stream) and ensure CloudTrail is enabled to audit record changes.
You SHOULD recommend enabling DNSSEC signing on the public hosted zone, because a signed zone lets validating resolvers detect spoofed or tampered responses for the records served from it.
You SHOULD avoid pointing public records at internal resources, since a public record discloses the target hostname or IP and can leak internal topology to anyone who resolves the name.
You SHOULD recommend a CAA record alongside A/AAAA records for a domain serving HTTPS, so only the certificate authorities the customer authorizes can issue certificates for it.
Additional Resources
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- AWS
- Publisher
- AWS (Official)
- Source
- aws/agent-toolkit-for-aws · skills/specialized-skills/networking-and-content-delivery-skills/route53 · commit 0a218f8
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- NOTICE (added by AutoGineer from NOTICE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by AWS or AWS.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download route53.zip