如何为Terraform批量创建的aws_instance生成对应Route53记录
实现方案
完全可以实现,你只需要给aws_route53_record资源也配置相同的count参数,配合Terraform内置的count.index索引变量即可完成序号拼接和实例IP的一一绑定。
前提准备
你需要先获取你要配置解析的Route53托管区域ID,可通过data源引用已存在的托管区:
# 引用已存在的Route53托管区,替换为你自己的域名和私有/公网属性 data "aws_route53_zone" "jenkins_zone" { name = "your-domain.com." # 域名末尾需带英文句号 private_zone = true # 公网托管区请改为false }
完整实现代码
在你原有EC2实例代码的基础上,新增Route53记录资源即可:
# 原有批量创建EC2的代码 resource "aws_instance" "agents" { count = 100 key_name = var.Jenkins_Controller_KeyName instance_type = "t2.micro" ami = data.aws_ami.latest-amazonlinux2.id } # 批量创建对应Route53 A记录 resource "aws_route53_record" "agent_dns" { count = length(aws_instance.agents) # 和EC2实例数量保持同步,后续修改count仅需改EC2侧即可 zone_id = data.aws_route53_zone.jenkins_zone.zone_id name = "worker${count.index}.${data.aws_route53_zone.jenkins_zone.name}" type = "A" ttl = "300" # 如果需要绑定公网IP,将private_ip替换为public_ip即可 records = [aws_instance.agents[count.index].private_ip] }
说明
count.index是Terraform内置变量,取值从0开始,批量创建100个资源时会自动从0遍历到99,刚好匹配你worker+序号的命名要求- 如果你需要序号从1开始到100,将name字段的
count.index替换为count.index + 1即可 length(aws_instance.agents)的写法可以保证后续调整EC2实例数量时,Route53记录的数量会自动同步增减,不需要手动修改两处count值
内容的提问来源于stack exchange,提问作者Ryan Glenn
相关产品推荐
相关产品推荐

