我经常使用 Terraform 创建经典的负载均衡器。这些项目的 TF 输出应包括负载均衡器的(当前)IP 地址。为此,我的代码中有以下内容:
data "dns_a_record_set" "lb_dns_a" {
host = "${aws_elb.myelb.dns_name}"
}
output "load_balancer_ip" {
value = "${data.dns_a_record_set.lb_dns_a.addrs}"
}
这确实有效,但最初创建 ELB 时除外。通常情况下,在创建 ELB 和它的 DNS 名称可解析之间存在相当大的延迟,因此我收到无法解析 DNS 名称的错误。几秒钟/分钟后,每个terraform refresh; terraform output;
显示 ELB 的正确当前 IP 地址。我想在第一次部署基础设施时,我需要注入某种抑制计时器以使 DNS 记录有时间变得可用。
我怎样才能实现这样一个保持计时器,以便创建 ELB,然后 TF 在创建之前等待(比如说)2 分钟data.dns_a_record_set.lb_dns_a
?
最好的解决方案是等到可以成功解析名称,然后再继续。
PS:我只有ELB有这个问题。ALB 和 NLB 似乎更快,或者只需要足够长的时间来创建侦听器和目标组,以便在创建输出时始终可以解析它们的 DNS 名称。