Terraform 为创建的每个 aws_instance 创建 Route53 记录
Posted
技术标签:
【中文标题】Terraform 为创建的每个 aws_instance 创建 Route53 记录【英文标题】:Terraform Create Route53 record for each aws_instance crreated 【发布时间】:2021-11-13 22:44:53 【问题描述】:我已经编写了以下 Terraform 代码:
resource "aws_instance" "agents"
count = 100
key_name = var.Jenkins_Controller_KeyName
instance_type = "t2.micro"
ami = data.aws_ami.latest-amazonlinux2.id
我的目标是创建 100 个 Jenkins 代理 EC2 实例。我想为每一个创建 Route53 记录。因此,如果我有count = 100
,它将创建 100 条这样的 A 记录(在伪代码中):
for i in 0..100
create_a_name("worker" + i.to_string)
如何在 Terraform 中做到这一点?有可能吗?
【问题讨论】:
就像你在aws_instance
上拥有count=100
一样,将这个计数放在reoute 53 记录上。那么记录的目标应该是aws_instance.slaves[count.index].something
Jenkins uses the terms controller and agents 而不是 master 和 slaves(AFAIK 从未使用过 slaves 这个词),所以我更新了这个术语,让人们更容易使用正确的术语来找到这个问题。跨度>
【参考方案1】:
而不是使用count
,最好使用aws_autoscaling_group 和desired_capacity
和max_size
100。这样可以确保高可用性和容错您的从属实例。可能需要考虑的事情。
但无论如何,回答您关于aws_route53_record
的问题。您可以按照以下方式进行操作:
resource "aws_route53_record" "www"
count = length(aws_instance.agents)
zone_id = aws_route53_zone.primary.zone_id
name = "worker$count.index.example.com"
type = "A"
ttl = "300"
# not clear from your question if you want to use public or private ip?
records = [aws_instance.agents[count.index].public_ip]
【讨论】:
records
中似乎缺少右方括号。 :)
@MarkoE 感谢您发现这一点。我刚刚解决了这个问题。
有点想知道为什么记录是一个数组。为什么你需要不止一个?
@RyanGlen 您可以返回多个 IP 以实现冗余或负载平衡。所以客户端可以尝试第一个IP,如果它不起作用,然后尝试第二个备用。
有趣,我不知道这样会起作用,哈哈。以上是关于Terraform 为创建的每个 aws_instance 创建 Route53 记录的主要内容,如果未能解决你的问题,请参考以下文章
定义:Terraform - AWS - aws_instance - user_data
如何确定 terraform 中 aws_instance.main.*.public_ip 中的数字