【问题标题】:How can I access value of tuple?如何访问元组的值?
【发布时间】:2020-11-06 23:02:07
【问题描述】:

我想知道如何从以下输出中获取值:

output "backend_tg_arn" {
  value = var.backend_tg_needed ? aws_lb_target_group.backend_tg[*].arn : null
}

使用以下代码生成:

resource "aws_lb_target_group" "backend_tg" {
  count       = var.backend_tg_needed ? 1 : 0
  name        = "${var.client_code}-${var.environment}-backend-tg"
  port        = var.backend_port
  protocol    = "HTTP"
  target_type = var.backend_target_type
  vpc_id      = aws_vpc.main_vpc.id
}

上面的输出作为变量传递给另一个模块:

   backend_tg_arn = module.network.backend_tg_arn

我正在尝试将其分配给 alb 侦听器的默认操作:

  default_action {
    type             = "forward"
    target_group_arn = var.backend_tg_arn
  }
}

得到错误:

var.backend_tg_arn 是包含 1 个元素的元组

属性“target_group_arn”的值不合适:需要字符串。

我正在努力如何访问这个arn 值...应该通过某种循环来完成,但无法弄清楚。

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    您始终将计数设置为 1,因此您可以只输出第一个元素(如果已创建):

    output "backend_tg_arn" {
      value = var.backend_tg_needed ? aws_lb_target_group.backend_tg[0].arn : null
    }
    

    【讨论】:

    • 再次 Rocksteady 进行救援 - 谢谢。假设我用[*] 输出这么少的元素。我以后如何才能将它们检索出来?
    • 你需要在你使用它们的地方专门索引它们。所以输出一个列表,然后使用它并使用backend_tg_arn = module.network.backend_tg_arns[5] 适当地索引以访问backend_tg_arns 列表中的第6个ARN。
    • 知道了。那是一次一个值。如果我一次需要所有这些,例如,由:output "private_subnets" { value = aws_subnet.private[*].id } 创建的子网,那么我需要使用例如这种循环或其他什么? subnets = [for subnet in data.terraform_remote_state.network.outputs.private_subnets : subnet]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多