true 和 false 结果表达式必须具有一致的类型。给定的表达式分别是字符串和数字的列表

Sag*_*hav 1 amazon-web-services terraform

我正在尝试使用 terraform 代码创建中转网关 VPC 附件,但是,当我执行 terraform 计划时出现以下错误;\nterraform 版本为 0.12

\n

错误:-

\n
\xe2\x94\x82 Error: Inconsistent conditional result types\n\xe2\x94\x82\n\xe2\x94\x82   on vpn-dynamic\\main.tf line 67, in resource "aws_ec2_transit_gateway_vpc_attachment" "tgw_vpc_attachment":\n\xe2\x94\x82   67:   subnet_ids         = lower(var.transit_gateway) == "enabled" ? var.tgw_subnet_ids : 0\n\xe2\x94\x82     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82     \xe2\x94\x82 var.tgw_subnet_ids is a list of string, known only after apply\n\xe2\x94\x82     \xe2\x94\x82 var.transit_gateway is a string, known only after apply\n\xe2\x94\x82\n\xe2\x94\x82 The true and false result expressions must have consistent types. The given expressions are list of      \n\xe2\x94\x82 string and number, respectively.\n
Run Code Online (Sandbox Code Playgroud)\n

main.tf:-

\n
resource "aws_ec2_transit_gateway_vpc_attachment" "tgw_vpc_attachment" {\n  count              = lower(var.transit_gateway) == "enabled" ? 1 : 0\n  subnet_ids         = lower(var.transit_gateway) == "enabled" ? var.tgw_subnet_ids : 0\n  transit_gateway_id = lower(var.transit_gateway) == "enabled" ? var.tgw_id : 0\n  vpc_id             = lower(var.transit_gateway) == "enabled" ? var.vpc_id : 0\n}\n
Run Code Online (Sandbox Code Playgroud)\n

变量.tf:-

\n
variable "transit_gateway" {\n  type        = string\n  description = "Whether to create Transit gateway or not"\n  default     = "ENABLED"\n}\nvariable "tgw_subnet_ids" {\n  type        = list(string)\n  description = "Transit gateway subnet Ids"\n  default     = ["subnet-12345", "subnet-54321"]\n}\nvariable "vpc_id" {\n  type        = string\n  description = "VPC Id"\n  default     = "vpc-abc123"\n}\nvariable "tgw_id" {\n  type        = string\n  description = "TGW id"\n  default     = "tgw-12345"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在这里,我尝试使用变量“tgw_subnet_ids”作为列表(字符串)以及资源“tgw_vpc_attachment”中的条件,但它不起作用。

\n

aas*_*yas 6

我相信,terraform 正在寻找的是 True 和 False 评估双方的一致类型。

因此,在您的代码中,正确的计算返回列表类型var.tgw_subnet_ids,错误的计算仅返回整数0。正如您所看到的,两者都不匹配,并且 terraform 出现错误。

如果你想传递 list 的 null 值,你可以使用nulltype https://www.terraform.io/docs/language/expressions/types.html#null

resource "aws_ec2_transit_gateway_vpc_attachment" "tgw_vpc_attachment" {
  count              = lower(var.transit_gateway) == "enabled" ? 1 : 0
  subnet_ids         = lower(var.transit_gateway) == "enabled" ? var.tgw_subnet_ids : null
  transit_gateway_id = lower(var.transit_gateway) == "enabled" ? var.tgw_id : 0
  vpc_id             = lower(var.transit_gateway) == "enabled" ? var.vpc_id : 0
}
Run Code Online (Sandbox Code Playgroud)