Indexing 地形列表元素超出范围?

Indexing 地形列表元素超出范围?,indexing,indexoutofboundsexception,terraform,Indexing,Indexoutofboundsexception,Terraform,从Terraform文档: 元素(列表,索引)-返回给定索引处列表中的单个元素。如果索引大于元素数,则此函数将使用标准mod算法包装 使用mod包装的好理由是什么?在我看来,这种行为可能会导致很多头痛 在我的脑海中,我只记得另外两种处理访问超出范围的元素的方法: Python/Ruby:返回None/Nil Java/JS/Ruby:引发错误 我对它们已经习以为常了,它们似乎是有道理的,你要么什么也得不到,要么是一个错误,但是为什么你会期望在列表中得到k mod n元素呢?如果您是实施者,您

从Terraform文档:

元素(列表,索引)-返回给定索引处列表中的单个元素。如果索引大于元素数,则此函数将使用标准mod算法包装

使用mod包装的好理由是什么?在我看来,这种行为可能会导致很多头痛

在我的脑海中,我只记得另外两种处理访问超出范围的元素的方法:

  • Python/Ruby:返回None/Nil
  • Java/JS/Ruby:引发错误

我对它们已经习以为常了,它们似乎是有道理的,你要么什么也得不到,要么是一个错误,但是为什么你会期望在列表中得到
k mod n
元素呢?如果您是实施者,您将如何证明这种行为选择的合理性。

这是一种必须自己进行修改的捷径,但在循环一个短列表(如您要将多个实例放入的子网或可用性区域的数量)时可能会很有用

这是一种非常常见的模式,出现在:

如果改用,则当数据源返回的实例多于子网时,就会出现索引越界异常

data "aws_subnet_ids" "private" {
  vpc_id = "${var.vpc_id}"
  tags {
    Tier = "Private"
  }
}

resource "aws_instance" "app" {
  count         = 6
  ami           = "${var.ami}"
  instance_type = "t2.micro"
  subnet_id     = "${element(data.aws_subnet_ids.private.ids, count.index)}"
}