【发布时间】: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)}
但还是不行。
知道怎么解决吗?
如果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