【问题标题】:Terraform lookup function - Error: Expected to be number, actual type is StringTerraform 查找函数 - 错误:应为数字,实际类型为字符串
【发布时间】:2019-08-04 06:12:45
【问题描述】:

我正在使用 Terraform 构建一些 AWS VPC 组件,例如下面的 aws_route

我正在尝试使用count 参数动态扩展 NAT 网关的数量:

resource "aws_route" "my_nat_gw" {
  route_table_id         = "${var.rt_id}"
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id         = "${nat_gw_id}"

  #I have an error here - on the "lookup" term
  count = "${length(var.azs) * lookup(map(var.enable_nat_gateway, 1), "true", 0)}"
}

为简洁起见,让我们在count 计算中忽略length(var.azs) 的部分。

我在lookup(map(var....) 部分收到以下错误:

应为数字,实际类型为字符串更多

enable_nat_gateway 变量是布尔值。

我还尝试了以下方法:

lookup(map(true, 1), true, 0)}
lookup(map("true", 1), "true", 0)}

但还是不行。

知道怎么解决吗?


对于不熟悉maplookup 语法的人的一些计算:

如果enable_nat_gateway 等于true,那么'map' is equal to{true=1} 和总查找项应该等于1

其他:

如果enable_nat_gateway 等于false,那么'map' is equal to{true=0} 和总查找项应该等于0


请注意,我使用的是 Terraform 0.11.11,因此仍然支持 map 函数。

【问题讨论】:

  • 你到底想在这里实现什么?如果 NAT 网关存在,只是将路由添加到路由表?为什么要为同一个路由表中的每个 AZ 建立一个?
  • 这是一个模块的一部分,我希望它根据具体需求动态设置。
  • 是的,但是为什么要在同一个路由表中有多个路由到同一个 NAT 网关?
  • 这就是我没有添加所有代码的原因 - 所以答案将针对错误(:但无论如何,我正在创建多个子网,每个子网都有自己的路由表、路由和NAT 网关。
  • 事实上,问题中的代码不符合minimal reproducible example 标准,因为它不够完整,任何人都无法运行以查看您的问题。最终,尽管您的计数过于复杂而没有任何好处。您最好使用适当的三元语句,例如count = "${var.enable_nat_gateway ? length(var.azs) : 0}"

标签: amazon-web-services terraform terraform-provider-aws


【解决方案1】:

如果您尝试有条件地添加 n 路由资源,那么您应该在此处使用ternary statement,例如:

resource "aws_route" "my_nat_gw" {
  count = "${var.enable_nat_gateway ? length(var.azs) : 0}"

  route_table_id         = "${var.rt_id}"
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id         = "${var.nat_gw_id}"
}

这会检查enable_nat_gateway 变量的计算结果是否为true,如果是,则为azs 变量中的每个元素创建一个资源。如果它不是真的,那么它不会创建任何资源。

【讨论】:

  • 看起来不错,但我会再等一会,寻找原始问题的可能解决方案。它可能会帮助其他人在未来面临同样的错误。
  • 这种语法非常复杂,来自于 Terraform 之前的 hack,添加了不稳定的三元语句。如果您真的想使用该 hack,那么您可能可以使用 count = "${length(var.azs) * var.enable_nat_gateway}" 之类的东西并依靠布尔值只是 0/1 整数这一事实,除非它们被扭曲为字符串,此时您基本上被卡住了。
猜你喜欢
  • 2019-07-20
  • 2021-09-20
  • 2011-10-04
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多