首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform:等待经典负载均衡器的A记录

Terraform:等待经典负载均衡器的A记录
EN

Stack Overflow用户
提问于 2018-11-02 20:43:51
回答 2查看 3.6K关注 0票数 4

我经常用Terraform创建经典的负载平衡器。这些项目的TF输出应该包括负载平衡器的(当前) IP地址。为了实现这一点,我的代码中有以下内容:

代码语言:javascript
复制
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在创建data.dns_a_record_set.lb_dns_a之前等待(例如)2分钟。

最好的解决方案是等到名称被成功解析后再继续。

P.S.:我只对ELB有这个问题。ALB和北草坪会议大楼似乎更快,或者仅仅需要足够长的时间来创建侦听器和目标组,以便它们的DNS名称在创建输出时始终是可解析的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-04 20:30:03

有一种叫做null_resource的东西,它可以与depends_on结合使用,它会使Terraform有点混乱,如下所示:

代码语言:javascript
复制
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}"
}

使用这个null_resource,我在构建图中注入一些只能在创建了data.dns_a_record_set.lb_dns_a之后才能创建的东西,但是必须在创建data.dns_a_record_set.lb_dns_a之前进行。那正是我要我按住计时器的地方。使用null_resource,我可以使用local-exec提供程序让TF运行bash命令sleep 300,这将导致Terraform在创建elb和执行查找之间等待5分钟。问题解决了。

更复杂的解决方案是让local-exec实际执行名称解析,直到它至少成功一次。

票数 2
EN

Stack Overflow用户

发布于 2020-09-10 15:38:28

Terraform 13现在有模块子句,可以利用它。此外,对于这种情况,也有一个时间提供者

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53125583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档