首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:不正确的属性值类型module.network.private_subnets[0]是由3个元素组成的元组

错误:不正确的属性值类型module.network.private_subnets[0]是由3个元素组成的元组
EN

Stack Overflow用户
提问于 2020-12-03 21:53:04
回答 4查看 2.9K关注 0票数 2

在尝试从terraform 11升级到terraform 12时,我遇到了一个问题。我以前使用以下语法从模块的ids列表中检索第三个元素。模块输出如下:

代码语言:javascript
复制
# Subnets
output "private_subnets" {
  description = "List of IDs of private subnets"
  value       = ["${aws_subnet.private.*.id}"]
}

在此之前,这种方法适用于地形11。

代码语言:javascript
复制
subnet_id              = "${element(module.network.private_subnets,3)}"

我认为可以使用2的索引来获得相同的结果,但是我得到了以下错误:

代码语言:javascript
复制
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

如果能对此提供任何帮助,我们将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-12-03 22:03:16

目前的使用价值:

代码语言:javascript
复制
 value       = ["${aws_subnet.private.*.id}"]

生成列表的列表。例如,

代码语言:javascript
复制
[
  [
    "subnet-0f5b759e80ffcf305",
    "subnet-0500c8c2a40e5b381",
  ],
]

如果您想继续以这种形式使用它,那么在以后使用element时,您必须执行以下操作:

代码语言:javascript
复制
subnet_id  = element(module.network.private_subnets[0], 3)

或者,将private_subnets重新定义为:

代码语言:javascript
复制
 value       = aws_subnet.private.*.id
票数 2
EN

Stack Overflow用户

发布于 2021-08-17 06:28:30

来自@Marcin的答案是正确的,但是在稍微不同的情况下,我遇到了一个非常类似的错误,我采取了不同的方法来解决它。

假设您有一个aws_security_group_rule规则,下面列表中的每个数据-sourced项,即data.aws_subnet.app1_subnets.*.cidr_blockdata.aws_subnet.app2_subnets.*.cidr_block都是一个元组,假设X元素--您可能会碰到一个错误-

代码语言:javascript
复制
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函数来解决这个问题。

修改如下:

代码语言:javascript
复制
cidr_blocks = [
data.aws_subnet.app1_subnets.*.cidr_block,
data.aws_subnet.app2_subnets.*.cidr_block
]

作为

代码语言:javascript
复制
cidr_blocks = flatten([
data.aws_subnet.app1_subnets.*.cidr_block,
data.aws_subnet.app2_subnets.*.cidr_block
])
票数 2
EN

Stack Overflow用户

发布于 2021-09-01 15:50:29

这对我来说很困难,但是我通过flatten函数来处理它,我用元组将它传递给扁平函数。

代码语言:javascript
复制
/* Subnets group for DBs */
resource "aws_db_subnet_group" "default" {
  name       = "main"
  subnet_ids = flatten([aws_subnet.PrivateSubnets.*.id])

  tags = {
    Name = "Private Subnet group"
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65134711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档