我的组织在route53中有几个不同的托管区域,其中有多个CNAME记录解析到我们负载平衡器的DNS名称。我想把这些记录改成指向我们新的全球加速器的IP地址。我创建了一个json文件,并使用cli上传它,收到以下错误:
调用时发生错误(InvalidChangeBatch)ChangeResourceRecordSets操作:[带DNS名称的A类型RRSet]Foo.Bar.com。不允许,因为类型
我发现的故障排除指南指出"只有当您最初有一个CNAME记录并且UPSERT到另一个CNAME记录时,UPSERT才成功。"我的下一个想法是创建一个文件来删除CNAME记录并在相同的更改中创建一个a记录(或者甚至背靠背运行它们),但我担心这可能会导致服务中断。对于AWS的管理,我还是个新手,欢迎大家指教。
是否有更好的方法将CNAME记录更改为a记录?
在我看来,这是最安全的方法:
-
将指向ELB DNS名称的所有CNAME记录的TTL设置为预计迁移完成的合理值,例如
3600
(1小时)。这里的想法是,您不希望这个值过低。如果您不能在此时间内完成迁移(即删除并重新创建A记录),用户可能会得到Unable to resolve DNS
错误。 -
等待新的TTL生效。
-
请提前准备好CLI命令。
- 删除所有旧CNAME记录的命令
- 创建命令,创建所有新的A记录,TTL为
300
(5分钟)。
-
先执行删除命令,等它们完成后,再执行创建命令。
-
测试更改并确保新记录正常工作。如果不能正常工作,请立即调试并更改DNS,直到系统正常工作。
-
将A记录的TTL增加到更大的值,如
3600
。 -
再等一两天,以防某些解析器不尊重TTL。同时,保留原始CNAME记录所指向的旧ELB。监控直接来自用户的ELB流量
-
当指标告诉您几乎所有流量都来自GA时,如果需要,您可以安全地终止ELB。