如何控制AWS负载均衡器的FQDN?实现重复部署域名固定
解决AWS负载均衡器重建后域名固定的问题
方案1:用AWS Route 53别名记录(最推荐)
- 核心逻辑:Route 53的别名记录并非普通CNAME,它直接关联AWS资源(如ELB),当ELB重建后,别名记录会自动指向新的ELB DNS,无需手动或编程修改。
- 操作步骤:
- 在Route 53中创建自定义域名的托管区(比如
example.com),确保域名的DNS服务器指向Route 53提供的服务器。 - 创建一条A/AAAA类型的别名记录,记录名设为你需要的固定域名(如
elb.example.com)。 - 目标选择「Alias to Application and Classic Load Balancer」,再选中对应区域和你的ELB资源。
- CloudFlare端只需配置一条CNAME记录指向
elb.example.com,后续无论ELB如何重建,该记录都无需修改。
- 在Route 53中创建自定义域名的托管区(比如
方案2:用基础设施即代码(IaC)自动同步DNS记录
如果用Terraform、CloudFormation等工具管理部署,可自动将新ELB的DNS同步到DNS记录:
Terraform示例:
# 创建ELB resource "aws_elb" "my_load_balancer" { name = "my-elb" availability_zones = ["ap-southeast-2a", "ap-southeast-2b"] listener { instance_port = 80 instance_protocol = "http" lb_port = 80 lb_protocol = "http" } } # 在Route 53创建CNAME记录指向ELB的DNS resource "aws_route53_record" "elb_cname" { zone_id = aws_route53_zone.my_zone.id name = "elb.example.com" type = "CNAME" ttl = "300" records = [aws_elb.my_load_balancer.dns_name] }
每次销毁重建ELB后,执行terraform apply会自动更新Route 53的记录,CloudFlare端依然只需指向固定的elb.example.com。
方案3:直接通过API更新CloudFlare记录
如果不想依赖Route 53,可在部署脚本中添加以下逻辑:
- 创建新ELB后,通过AWS CLI获取它的DNS名称:
aws elb describe-load-balancers --names my-elb --query 'LoadBalancerDescriptions[0].DNSName' --output text - 调用CloudFlare的API,修改对应CNAME记录的值为新的ELB DNS。
这种方式需要维护CloudFlare的API密钥和域名信息,稳定性不如前两种方案。
内容的提问来源于stack exchange,提问作者Dylan Nicholson
相关产品推荐
相关产品推荐

