我正在使用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)}
但是还是不好。
有什么想法要解决吗?
如果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
函数。
答案 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
变量中的每个元素创建一个资源。如果不正确,则不会创建任何资源。