能否在AWS Route53同一记录名下配置别名与IP双A记录实现零停机迁移?
解决Route53添加多条A记录实现轮询的报错问题
问题根源
你遇到的InvalidChangeBatch 400错误,是因为Route53不允许同一域名(name)+同一记录类型(type)存在多个独立的记录集。你需要的轮询流量分配,是在同一个A记录集内添加多个资源记录值,而非创建两条独立的A记录。
解决方案
Route53的简单路由策略(默认)支持在同一记录集内包含多个值(包括别名记录和普通IP),默认会以轮询方式返回这些值,正好满足你的零停机迁移需求。
1. 控制台手动操作步骤
- 登录AWS Route53控制台,进入你的托管区域
- 找到现有
web.secret.的A记录,点击「编辑记录」 - 在「值」区域,保留原EC2的弹性IP(EIP),点击「添加另一个值」
- 切换到「别名」选项,选择你的ALB:
- 「别名目标类型」选「应用负载均衡器」
- 选择ALB所在区域,然后选中目标ALB
- 开启「评估目标运行状况」(可选,确保只返回健康的目标)
- 保存更改,此时该记录集将包含两个条目:EC2的EIP和ALB的别名
2. Terragrunt/Terraform配置方式
不要创建两个独立的aws_route53_record资源,而是在同一资源中同时定义原EIP和ALB别名:
resource "aws_route53_record" "web_secret" { zone_id = aws_route53_zone.your_zone.zone_id name = "web.secret" type = "A" # 保留原EC2的EIP records = ["x.x.x.x"] # 添加ALB的别名配置 alias { name = aws_lb.your_alb.dns_name zone_id = aws_lb.your_alb.zone_id evaluate_target_health = true } routing_policy = "simple" # 默认策略,轮询返回多个值 }
- 注意:如果之前已通过Terraform管理该记录,需确保现有记录已导入状态,再修改配置添加别名;若之前是手动创建,可先导入再配置。
3. 验证与后续操作
- 配置完成后,用
dig web.secret或nslookup web.secret测试,会看到轮询返回EC2 IP和ALB的DNS解析结果 - 2-3天后业务平稳时,只需编辑该记录集,移除EC2的EIP条目即可完成迁移,全程无停机
内容的提问来源于stack exchange,提问作者Kristi Jorgji
相关产品推荐
相关产品推荐

