terraform aws_lb_listener_rule 条件争论在 terraform 0.12.20 中没有得到认可

terraform aws_lb_listener_rule condition arguement not getting recognized in terraform 0.12.20

在 aws_lb_listener_rule

中出现此错误

错误:不支持的参数

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

此处不应有名为“field”的参数。

错误:不支持的参数

on ....\euc-terraformcontrol-alb\alb.tf 第 128 行,在资源“aws_alb_listener_rule”“alb_listener_rule”中: 128: 值 = ["${element(split(",", var.listener_rule_value), count.index)}"]

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)}"
  }
}

fieldvalues 在 aws 提供程序版本 2.x 中被 弃用 ,如 here. In the provider version 3.x they are removed and no longer valid as shown in the new docs for condition 块所示。

这在官方的“Terraform AWS Provider Version 3 升级指南”中有进一步解释:

因此,您要么必须迁移代码以使用 aws 提供程序 3.x,要么返回使用旧版本。

这是 new version

中的重大更改

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

 condition {
   field = "host-header"
   values = ["api.example.com"]
 }

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

所以上面的条件就会变成

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

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

provider "aws" {
  version = "~> 2.31.0"
}

The version meta-argument specifies a version constraint for a provider, and works the same way as the version argument in a required_providers block. The version constraint in a provider configuration is only used if required_providers does not include one for that provider.

/provider-veriosing