terraform 0.12.20中未识别terraform aws_lb_listener_rule条件争论

问题描述

在aws_lb_listener_rule中获取错误

错误:参数不受支持

.... \ euc-terraformcontrol-alb \ alb.tf第127行,在资源“ aws_alb_listener_rule”“ alb_listener_rule”中: 127:字段=“ $ {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),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)}"
  }
}

解决方法

这打破了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"
}

版本meta-argument指定provider的版本约束,并以与required_providers块中的version参数相同的方式工作。只有在required_providers不包含该提供程序的版本限制时,才使用提供程序配置中的版本约束。

/provider-veriosing

,

在{2}中,fieldvalues在AWS Provider 2.x版本中被弃用。在提供者版本3.x中,它们被删除并且不再有效,如here块的新文档中所示。

官方的《 Terraform AWS Provider版本3升级指南》中对此进行了进一步解释:

因此,您要么必须迁移代码以与aws provider 3.x一起使用,要么回到使用较旧的版本。