在Terraform中的每个for_期间访问兄弟姐妹

在Terraform中的每个for_期间访问兄弟姐妹,terraform,Terraform,在terraform中,如果我在地图上使用for_each,在任何迭代中是否有任何方法可以访问在先前迭代中创建的资源中的值 module "my_module" { for_each = var.regions 这显然意味着顺序很重要,但如果我已经确保我的地图的定义方式是依赖项在依赖项之前,我可以引用它吗?对于这样的情况,我认为使用Terraform的计数功能是有意义的: module "my_module" { # assuming var.

在terraform中,如果我在地图上使用
for_each
,在任何迭代中是否有任何方法可以访问在先前迭代中创建的资源中的值

module "my_module" {

  for_each = var.regions

这显然意味着顺序很重要,但如果我已经确保我的地图的定义方式是依赖项在依赖项之前,我可以引用它吗?

对于这样的情况,我认为使用Terraform的
计数
功能是有意义的:

module "my_module" {
  # assuming var.regions is a list:
  count = len(var.regions)
  # region is var.regions[count.index]
  # previous region is var.regions[count.index - 1]
您需要围绕如何处理第一个项目进行工作;要么只迭代
len(var.regions)-1次
,要么对第一项执行特殊操作


每个的
语法用于迭代映射或集合。这意味着顺序并不重要,因为映射和集不是有序的数据结构。这也意味着您实际上不能“以依赖项优先于依赖项的方式定义映射”。您可能希望定义一个列表,其中包含地图的键,键的顺序可以接受。

Terraform的重复构造不是迭代:从概念上讲,所有实例都同时应用了它们的操作。实际上,如果您拥有的实例数量超过了
-parallelism
选项所允许的数量,这并不总是正确的,但即使在这种情况下,Terraform将处理它们的顺序也没有定义

Terraform中的依赖关系是块之间的,而不是同一块的多个实例之间的,因为重复的处理是作为块处理的一部分进行的,在依赖关系已经解决很久之后

因此,如果您想要一个模块实例依赖于另一个模块实例,则必须将它们声明为两个独立的块,其中一个块引用另一个块。无法在同一对象的多个实例之间创建依赖关系