use*_*682 6 amazon-web-services amazon-elb terraform
我经常使用 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}"
}
Run Code Online (Sandbox Code Playgroud)
这确实有效,除了最初创建 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 名称。
有一个叫做 的东西null_resource,它可以与 结合使用depends_on,来扰乱 Terraform,如下所示:
resource "null_resource" "patience" {
depends_on = [ "aws_elb.myelb" ]
triggers {
lb_dns_name = "${aws_elb.myeln.dns_name}"
}
provisioner "local-exec" {
command = "sleep 300"
}
}
data "dns_a_record_set" "lb_dns_a" {
depends_on = [ "null_resource.patience" ]
host = "${aws_elb.myelb.dns_name}"
}
Run Code Online (Sandbox Code Playgroud)
这样,null_resource我在构建图中注入了一些东西,这些东西只能在创建 ELB 之后创建,但必须先于创建data.dns_a_record_set.lb_dns_a. 这正是我想要的抑制计时器。有了这个,null_resource我可以使用local-exec配置器让 TF 运行 bash 命令sleep 300,这会导致 Terraform 在创建 elb 和执行查找之间等待 5 分钟。问题解决了。
更复杂的解决方案local-exec实际上会进行名称解析,直到至少成功一次。
| 归档时间: |
|
| 查看次数: |
4676 次 |
| 最近记录: |