Terraform查找功能-错误:预期为数字,实际类型为String

时间:2019-03-13 14:17:45

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

我正在使用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)}"
}

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

我在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函数。

1 个答案:

答案 0 :(得分: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变量中的每个元素创建一个资源。如果不正确,则不会创建任何资源。