Terraform 地形aws_lb_侦听器_规则条件

Terraform 地形aws_lb_侦听器_规则条件,terraform,Terraform,我尝试从terraform的v0.11迁移到v0.12,但在条件标签上遇到了一些问题 这是我的资源: resource "aws_lb_listener_rule" "static" { listener_arn = var.alb_int_arn priority = index(var.priority_load, count.index) action { type = "forward" target_group_arn =

我尝试从terraform的v0.11迁移到v0.12,但在条件标签上遇到了一些问题

这是我的资源:

resource "aws_lb_listener_rule" "static" {
  listener_arn = var.alb_int_arn
  priority     = index(var.priority_load, count.index)

  action {
    type             = "forward"
    target_group_arn = aws_alb_target_group.alb_target_group.arn
  }

  count = var.count_path

  condition {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
}

var.path_to_service这是一个字符串列表,var.priority_load这是一个数字列表

我的问题是,当我尝试应用terraform文件时,总是告诉我相同的错误:

属性值的值不正确:需要一组字符串

我试图直接输入一个字符串,但我也有同样的错误

我的IDE IntelliJ告诉我,当它检查代码时,条件标记中有一个错误,错误是:

具有未知typefirst文本的报表块

我做了一个测试,并更改了块的条件标记,如下所示:

condition = {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
variable "path_to_service" {
  type = list(set(string))
}
  path_to_service = [
    ["a", "b"],
    ["c"],
  ]
这是一个语法错误,但对于我的IDE来说,这是一个正确的配置。。。显然不行


对我有什么想法吗

此错误表示此values参数需要一组字符串,但显然var.path_to_服务的元素不是该类型

您没有共享变量path_to_服务的定义,但为了使其能够按照编写的方式使用此配置,需要声明如下内容:

condition = {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
variable "path_to_service" {
  type = list(set(string))
}
  path_to_service = [
    ["a", "b"],
    ["c"],
  ]
…调用模块分配给它的值需要如下嵌套:

condition = {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
variable "path_to_service" {
  type = list(set(string))
}
  path_to_service = [
    ["a", "b"],
    ["c"],
  ]
由于变量的名称是单数的,我想它更可能是一个单独字符串的列表,每个服务一个:

variable "path_to_service" {
  type = list(string)
}
如果这是真的,那么您需要通过将表达式包装在括号[]中,将这些单独的字符串包装在一个元素集中:

在为Terraform 0.12更新此语法的同时,您还可以切换到新的列表索引语法,这将获得相同的结果:

  values = [var.path_to_service[count.index]]
用我上面给出的示例变量值添加这些列表括号将使Terraform理解这一点,就好像您已经编写了以下内容一样,使用a作为示例:

  condition {
    host_header {
      values = ["a"]
    }
  }

…似乎与该values参数所需的类型匹配。

此错误表示该values参数所需的是一组字符串,但显然var.path_to_服务的元素不是该类型

您没有共享变量path_to_服务的定义,但为了使其能够按照编写的方式使用此配置,需要声明如下内容:

condition = {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
variable "path_to_service" {
  type = list(set(string))
}
  path_to_service = [
    ["a", "b"],
    ["c"],
  ]
…调用模块分配给它的值需要如下嵌套:

condition = {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
variable "path_to_service" {
  type = list(set(string))
}
  path_to_service = [
    ["a", "b"],
    ["c"],
  ]
由于变量的名称是单数的,我想它更可能是一个单独字符串的列表,每个服务一个:

variable "path_to_service" {
  type = list(string)
}
如果这是真的,那么您需要通过将表达式包装在括号[]中,将这些单独的字符串包装在一个元素集中:

在为Terraform 0.12更新此语法的同时,您还可以切换到新的列表索引语法,这将获得相同的结果:

  values = [var.path_to_service[count.index]]
用我上面给出的示例变量值添加这些列表括号将使Terraform理解这一点,就好像您已经编写了以下内容一样,使用a作为示例:

  condition {
    host_header {
      values = ["a"]
    }
  }
…它似乎与该values参数所期望的类型匹配