terraform aws_lb_listener_rule 条件争论在 terraform 0.12.20 中未得到识别

San*_*ver 5 amazon-web-services terraform terraform-provider-aws terraform0.12+

在 aws_lb_listener_rule 中收到此错误

错误:不支持的参数

在 ....\euc-terraformcontrol-alb\alb.tf 第 127 行,资源 "aws_alb_listener_rule" "alb_listener_rule": 127: field = "${element(split(",", var.listener_rule_field), count.index )}"

这里不需要名为“field”的参数。

错误:不支持的参数

在 ....\euc-terraformcontrol-alb\alb.tf 第 128 行,资源“aws_alb_listener_rule”“alb_listener_rule”:128:值= [“$ {element(split(”,”,var.listener_rule_value),计数。指数)}”]

resource "aws_alb_listener_rule" "alb_listener_rule" {
  count              = "${length(compact(split(",", var.priority))) > 0 ? "${length(compact(split(",", var.priority)))}" : 0}"
  listener_arn       = "${var.listener_arn}"
  priority           = "${element(split(",", var.priority), count.index)}"
  action              {
    type             = "forward"
    target_group_arn = "${element(split(",", var.target_group_arn), count.index)}"
  }
  condition           {
    //field            = "${element(split(",", var.listener_rule_field), count.index)}"
    //values           = "${element(split(",", var.listener_rule_value), count.index)}"
  }
}

Run Code Online (Sandbox Code Playgroud)

Adi*_*iii 6

这是新版本中的重大更改

在旧版本中,我们可以使用以下代码进行条件路由

 condition {
   field = "host-header"
   values = ["api.example.com"]
 }
Run Code Online (Sandbox Code Playgroud)

将您的 Terraform 配置切换为使用host_headerpath_pattern 配置块

那么上面的条件就会变成

   condition {
    host_header {
      values = ["api.example.com"]
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果您在某些 CI/CD 平台上运行代码,那么最好在配置中添加版本,以避免将来出现此类问题并保持代码兼容。

provider "aws" {
  version = "~> 2.31.0"
}
Run Code Online (Sandbox Code Playgroud)

versionmeta-argument指定 的版本约束provider,其工作方式与 required_providers 块中的版本参数相同。仅当 required_providers 不包含该提供程序的版本约束时,才会使用提供程序配置中的版本约束。

/provider-veriosing