在尝试从terraform 11升级到terraform 12时,我遇到了一个问题。我以前使用以下语法从模块的ids列表中检索第三个元素。模块输出如下:
# Subnets
output "private_subnets" {
description = "List of IDs of private subnets"
value = ["${aws_subnet.private.*.id}"]
}在此之前,这种方法适用于地形11。
subnet_id = "${element(module.network.private_subnets,3)}"我认为可以使用2的索引来获得相同的结果,但是我得到了以下错误:
Error: Incorrect attribute value type
on terraformfile.tf line 65, in resource "aws_instance" "myinstance":
65: subnet_id = module.network.private_subnets[2]
|----------------
| module.network.private_subnets[2] is tuple with 3 elements如果能对此提供任何帮助,我们将不胜感激。
发布于 2020-12-03 22:03:16
目前的使用价值:
value = ["${aws_subnet.private.*.id}"]生成列表的列表。例如,
[
[
"subnet-0f5b759e80ffcf305",
"subnet-0500c8c2a40e5b381",
],
]如果您想继续以这种形式使用它,那么在以后使用element时,您必须执行以下操作:
subnet_id = element(module.network.private_subnets[0], 3)或者,将private_subnets重新定义为:
value = aws_subnet.private.*.id发布于 2021-08-17 06:28:30
来自@Marcin的答案是正确的,但是在稍微不同的情况下,我遇到了一个非常类似的错误,我采取了不同的方法来解决它。
假设您有一个aws_security_group_rule规则,下面列表中的每个数据-sourced项,即data.aws_subnet.app1_subnets.*.cidr_block和data.aws_subnet.app2_subnets.*.cidr_block都是一个元组,假设X元素--您可能会碰到一个错误-
Error: Incorrect attribute value type
on stack.tf line 44, in resource "aws_security_group_rule" "ds_security_group_ingress_rule":
44: cidr_blocks = [
45: data.aws_subnet.app1_subnets.*.cidr_block,
46: data.aws_subnet.app2_subnets.*.cidr_block
47: ]
|----------------
| data.aws_subnet.app1_subnets.*.cidr_block is tuple with 3 elements
| data.aws_subnet.app2_subnets.*.cidr_block is tuple with 3 elements
Inappropriate value for attribute "cidr_blocks": element 0: string required.我不得不使用flatten函数来解决这个问题。
修改如下:
cidr_blocks = [
data.aws_subnet.app1_subnets.*.cidr_block,
data.aws_subnet.app2_subnets.*.cidr_block
]作为
cidr_blocks = flatten([
data.aws_subnet.app1_subnets.*.cidr_block,
data.aws_subnet.app2_subnets.*.cidr_block
])发布于 2021-09-01 15:50:29
这对我来说很困难,但是我通过flatten函数来处理它,我用元组将它传递给扁平函数。
/* Subnets group for DBs */
resource "aws_db_subnet_group" "default" {
name = "main"
subnet_ids = flatten([aws_subnet.PrivateSubnets.*.id])
tags = {
Name = "Private Subnet group"
}
}https://stackoverflow.com/questions/65134711
复制相似问题