如何在 Terraform 的资源中引用模块的值

How to reference a value of module in a resource in Terraform

我正在尝试使用 http_listener_rule 资源中的 ALB 模块值。我发现只有一种方法可以做到这一点,那就是使用这种语法:资源中的“${module.alb.http_tcp_listener_arns}” 但这会引发以下错误:属性“listener_arn”的值不合适:需要字符串。

出现以下错误: 错误:属性值类型不正确 在 main.tf 行 197,在资源“aws_lb_listener_rule”“host_based_routing”中: 197:listener_arn=“${module.alb.http_tcp_listener_arns}” ├────────────────── │ module.alb.http_tcp_listener_arns 是空元组

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

resource "aws_lb_listener_rule" "host_based_routing" {
  listener_arn = "${module.alb.http_tcp_listener_arns}"
  priority     = 99

  action {
    type             = "forward"
    target_group_arn = "${module.alb.target_group_arns}"
  }

  condition {
    host_header {
      values = ["example.com"]
    }
  }
}

module "alb" {
  source = "git@github.com:terraform-aws-modules/terraform-aws-alb.git?ref=v6.0.0"

  name = "demo-alb"

  load_balancer_type = "application"

  vpc_id          = module.vpc.vpc_id
  subnets         = module.vpc.public_subnets
  security_groups = [module.security_group_asg.security_group_id]

  target_groups = [
    {
      name             = "target-group"
      backend_protocol = "HTTP"
      backend_port     = 80
      target_type      = "instance"
      health_check = {
        enabled             = true
        interval            = 110
        path                = "/drupal"
        port                = "traffic-port"
        healthy_threshold   = 3
        unhealthy_threshold = 3
        timeout             = 100
        protocol            = "HTTP"
        matcher             = "200-399"
      }
    }
  ]
}

module.alb.http_tcp_listener_arns 是一个 ARN 列表,因此您必须为您的 host_based_routing 指定单独的 ARN。如果你只有一个,那么你可以试试:

listener_arn = module.alb.http_tcp_listener_arns[0]