我正在尝试在现有托管区域上添加 DNS 记录。我尝试使用 ResourceRecordSet 类型作为 A 记录和 CNAME 记录的以下命令。尝试创建 A 记录的命令失败,但更改为 CNAME 时相同的命令有效
命令失败
aws route53 change-resource-record-sets --hosted-zone-id XXXXXXXXXXXXX --change-batch {"Changes": [{"Action": "CREATE","ResourceRecordSet": {"Name": "api-test-1.envio.systems","Type": "A","TTL": 30,"ResourceRecords": [{"Value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-14xxxxxxxxxxxxx26.elb.eu-central-1.amazonaws.com"}]}}]}
错误:
调用 ChangeResourceRecordSets 操作时发生错误 (InvalidChangeBatch):[无效资源记录:致命问题:ARRDATAIllegalIPv4Address(值不是有效的 IPv4 地址)遇到 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-14xxxxxxxxxxxxx26.elb.eu-central-1.amazonaws.com。 ']
以下命令有效,唯一更改的是 ResourceRecordSet 类型从 A 更改为 CNAME
aws route53 change-resource-record-sets --hosted-zone-id XXXXXXXXXXXXX --change-batch {"Changes": [{"Action": "CREATE","ResourceRecordSet": {"Name": "api-test-st-1.envio.systems","Type": "CNAME","TTL": 30,"ResourceRecords": [{"Value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-14xxxxxxxxxxxxx26.elb.eu-central-1.amazonaws.com"}]}}]}
问题是什么?为什么 CNAME 使用相同的命令但不能使用 A 记录?
在 DNS 中,
A
(“地址”)记录指向 IPv4 地址。一条 CNAME
记录指向另一个 dns 名称。
AWS 确实有记录别名的概念,它本质上是一个 CNAME 记录,它对值进行内部 Route 53 查找并以 A 记录的形式出现。
https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer.html介绍了如何设置别名记录。 https://aws.amazon.com/premiumsupport/knowledge-center/alias-resource-record-set-route53-cli/ 讨论使用 CLI 执行此操作,它更准确地表示 API 接受的字段。基本上,您指定 ELB DNS 记录的托管区域 ID 及其地址。
创建“A”类型记录时,预期值为 IPv4 地址。在您的命令中,您将 DNS 名称指定为导致错误的值。
如果您想使用 DNS 名称作为值,请创建“别名 A 或 CNAME”记录
aws Route53 更改资源记录集 --hosted-zone-id XXXXXXXXXXXXX --change-batch {"更改": [{"操作": "创建","ResourceRecordSet": {"名称": "api- test-1.envio.systems","类型": "CNAME","TTL": 30,"ResourceRecords": [{"值": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-14xxxxxxxxxxxxx26.elb.eu-central-1.amazonaws.com" }]}}]}