一键导入
route53
Manage Amazon Route 53 hosted zones, DNS records, health checks, and domain registrations via AWS CLI.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Manage Amazon Route 53 hosted zones, DNS records, health checks, and domain registrations via AWS CLI.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Manage AWS Certificate Manager certificates, validation, renewal, and import for ALB, CloudFront, and API Gateway via AWS CLI.
Manage Amazon API Gateway REST APIs, HTTP APIs, WebSocket APIs, stages, and deployments via AWS CLI.
Manage EC2 Auto Scaling groups, launch templates, scaling policies, and scheduled actions via AWS CLI.
Manage Elastic Load Balancers (ALB, NLB, CLB), target groups, listeners, and health checks via AWS CLI.
Manage AWS Organizations accounts, OUs, SCPs, and delegated administration via AWS CLI.
Manage Amazon SageMaker notebooks, training jobs, models, endpoints, and pipelines via AWS CLI.
| name | route53 |
| description | Manage Amazon Route 53 hosted zones, DNS records, health checks, and domain registrations via AWS CLI. |
| metadata | {"openclaw":{"emoji":"🌐","requires":{"bins":["aws"]}}} |
Use this skill for DNS management: creating and managing hosted zones, adding/updating/deleting DNS records, configuring health checks, managing registered domains, and troubleshooting DNS resolution.
route53:* for full access, or scoped policies for specific operationsroute53domains:* (operates only in us-east-1)# List all hosted zones
aws route53 list-hosted-zones --output table \
--query 'HostedZones[].{Id:Id,Name:Name,Records:ResourceRecordSetCount,Private:Config.PrivateZone}'
# List records in a hosted zone
aws route53 list-resource-record-sets \
--hosted-zone-id <zone-id> \
--output table \
--query 'ResourceRecordSets[].{Name:Name,Type:Type,TTL:TTL,Values:ResourceRecords[].Value|join(`, `,@)}'
# Get hosted zone details
aws route53 get-hosted-zone --id <zone-id>
# List health checks
aws route53 list-health-checks \
--query 'HealthChecks[].{Id:Id,Type:HealthCheckConfig.Type,FQDN:HealthCheckConfig.FullyQualifiedDomainName,Port:HealthCheckConfig.Port}' \
--output table
# Get health check status
aws route53 get-health-check-status --health-check-id <health-check-id>
# List registered domains (us-east-1 only)
aws route53domains list-domains --region us-east-1 \
--query 'Domains[].{Name:DomainName,Expiry:Expiry,AutoRenew:AutoRenew}' \
--output table
# Test DNS resolution (Route 53 resolver)
aws route53 test-dns-answer \
--hosted-zone-id <zone-id> \
--record-name <fqdn> \
--record-type A
⚠️ Cost note: Hosted zones cost $0.50/month. Queries cost $0.40 per million for standard records. Health checks start at $0.50/month.
Route 53 uses change batches for record modifications:
# Create or update a record (UPSERT = create if missing, update if exists)
aws route53 change-resource-record-sets \
--hosted-zone-id <zone-id> \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "<record-name>",
"Type": "A",
"TTL": 300,
"ResourceRecords": [{"Value": "<ip-address>"}]
}
}]
}'
# Create a CNAME record
aws route53 change-resource-record-sets \
--hosted-zone-id <zone-id> \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "<subdomain.example.com>",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [{"Value": "<target.example.com>"}]
}
}]
}'
# Create an alias record (for ALB, CloudFront, S3, etc.)
aws route53 change-resource-record-sets \
--hosted-zone-id <zone-id> \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "<record-name>",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "<target-hosted-zone-id>",
"DNSName": "<target-dns-name>",
"EvaluateTargetHealth": true
}
}
}]
}'
# Create MX records
aws route53 change-resource-record-sets \
--hosted-zone-id <zone-id> \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "<domain>",
"Type": "MX",
"TTL": 3600,
"ResourceRecords": [
{"Value": "10 mail1.example.com"},
{"Value": "20 mail2.example.com"}
]
}
}]
}'
# Create a hosted zone
aws route53 create-hosted-zone \
--name <domain-name> \
--caller-reference "$(date +%s)"
# Check change status
aws route53 get-change --id <change-id>
# Create an HTTP health check
aws route53 create-health-check \
--caller-reference "$(date +%s)" \
--health-check-config '{
"Type": "HTTP",
"FullyQualifiedDomainName": "<fqdn>",
"Port": 80,
"ResourcePath": "/health",
"RequestInterval": 30,
"FailureThreshold": 3
}'
# Create an HTTPS health check
aws route53 create-health-check \
--caller-reference "$(date +%s)" \
--health-check-config '{
"Type": "HTTPS",
"FullyQualifiedDomainName": "<fqdn>",
"Port": 443,
"ResourcePath": "/health",
"RequestInterval": 30,
"FailureThreshold": 3
}'
🛑 DESTRUCTIVE — Always confirm with the user before executing any of these commands.
# Delete a record
aws route53 change-resource-record-sets \
--hosted-zone-id <zone-id> \
--change-batch '{
"Changes": [{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "<record-name>",
"Type": "<record-type>",
"TTL": <ttl>,
"ResourceRecords": [{"Value": "<current-value>"}]
}
}]
}'
# Delete a hosted zone (must be empty of non-default records first)
aws route53 delete-hosted-zone --id <zone-id>
# Delete a health check
aws route53 delete-health-check --health-check-id <health-check-id>
⚠️ Deleting a record requires specifying the EXACT current values (name, type, TTL, records). Always list-resource-record-sets first.
ZONE_ID="<zone-id>"
# Root domain → ALB
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "example.com",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "<alb-zone-id>",
"DNSName": "<alb-dns-name>",
"EvaluateTargetHealth": true
}
}
}]
}'
# www → root (CNAME)
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "www.example.com",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [{"Value": "example.com"}]
}
}]
}'
ZONE_ID="<zone-id>"
# Blue environment (90% traffic)
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "api.example.com",
"Type": "A",
"SetIdentifier": "blue",
"Weight": 90,
"TTL": 60,
"ResourceRecords": [{"Value": "<blue-ip>"}]
}
}]
}'
# Green environment (10% traffic)
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "api.example.com",
"Type": "A",
"SetIdentifier": "green",
"Weight": 10,
"TTL": 60,
"ResourceRecords": [{"Value": "<green-ip>"}]
}
}]
}'
aws route53 list-resource-record-sets --hosted-zone-id <zone-id> \
--output json > zone-backup-$(date +%Y%m%d).json
| Error | Cause | Fix |
|---|---|---|
NoSuchHostedZone | Invalid zone ID | Verify with list-hosted-zones; zone IDs start with /hostedzone/ |
InvalidChangeBatch | Record values don't match for DELETE | List current records first; DELETE requires exact current values |
HostedZoneNotEmpty | Trying to delete zone with records | Delete all non-NS/SOA records first |
DelegationSetNotAvailable | Creating too many zones rapidly | Wait and retry; AWS throttles zone creation |
PriorRequestNotComplete | Previous change still propagating | Wait for INSYNC status with get-change |