Terraform中如何将域名后缀拼接至主机名列表所有元素
解决Terraform中负载均衡监听器规则的域名拼接问题
你需要对domain_list里的每个元素逐个进行字符串拼接,直接用+、join或concat都做不到这点——这些函数无法实现列表元素与字符串的逐个配对拼接。正确的做法是用Terraform的for表达式遍历列表,生成拼接后的新列表。
另外注意你的route53_domain值末尾带了个.,直接拼接会导致结果多一个冗余的点(比如bi.dev.apple.com.),所以需要先用trim函数去掉末尾的.,再和列表元素拼接。
修改后的aws_lb_listener_rule完整配置如下:
resource "aws_lb_listener_rule" "lb_app" { listener_arn = data.aws_lb_listener.https.arn action { type = "forward" target_group_arn = aws_lb_target_group.lb_app.arn } condition { host_header { values = [for d in var.domain_list : "${d}.${trim(var.route53_domain, ".")}"] } } }
关键逻辑说明:
[for d in var.domain_list : ...]:遍历domain_list的每个元素,将临时变量d赋值为当前元素${d}.${trim(var.route53_domain, ".")}:把当前元素d和去掉末尾点的route53_domain用.拼接,生成符合要求的完整域名- 最终
values会输出你期望的结果:["bi.dev.apple.com", "test.dev.apple.com", "app.dev.apple.com"]
内容的提问来源于stack exchange,提问作者Oleksadr S
相关产品推荐
相关产品推荐

