我们希望不再使用增量数字作为实例的主机名 . 这些机器不在自动缩放组中,因此如果需要,我们可以保留 prod-webserver-001
, prod-webserver-002
等惯例,但只有标签可用才有意义 .
我们能够通过我们的ASG服务器使用post脚本完成此任务但不同于此,我希望Terraform跟踪DNS记录,以便在我发出 terraform destroy
时它们被销毁 .
理想情况下,我们希望 instance_id
中的连字符后面的前六个字符 . 例如,如果 instance_id
是 i-0876cr2456
,我们想在名称中使用 0876cr
.
prod-webserver-0876cr
prod-webserver-09a24i
Terraform代码:
resource "aws_instance" "instance" {
...
...
}
resource "aws_route53_record" "instance_dns_a" {
count = "${var.num_instances}"
zone_id = "${var.internal_zone_id}"
# New line but we want the parsed version
name = "${aws_instance.instance.id}"
# old that works
name = "${format(prod-${service_name}-%03d", count.index + 1)}"
}
1 回答
您可以使用substr从实例ID中提取前6个字符:
因此,要在Route53记录中使用它,您需要使用以下内容:
我会担心截断实例ID以寻找需要独特的东西,因为你将不可避免地得到带有
i-123456a...
和i-123456b
的ID的实例,然后你最终会用第二个IP地址覆盖prod-webserver-123456
记录实例并丢失第一条记录 . 你需要截断这里的任何理由吗? DNS中的第一个标签可以使用63个字符,这应该足以让这个未被截断的没有?