Terraform:根据值从地图中删除重复项

Mad*_*bar 1 tuples terraform

我有一个映射到局部变量的元组

locals {
  my_val = [
    {
      region = "us-east-1"
      value  = 1000
      data = 3000
    },
    {
      region = "us-east-1"
      value = 1001
      data = 4000
    },
    {
      region = "us-east2"
      value = 1002
      data = 5000
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要根据该对的值删除重复项,在这里我想放置区域条件us-east-1,输出应该是

{
my_val = [
    {
      region = "us-east-1"
      value  = 1000
      data = 3000
    },
    {
      region = "us-east2"
      value = 1002
      data = 5000
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

需要帮助在地图对象的值上应用不同值。

mar*_*iux 6

如果我理解正确的话,这是一个简单的方法,你想保持独特region和不独特(region,value)

locals {
  new_val = values(zipmap(local.my_val.*.region, local.my_val))
}
Run Code Online (Sandbox Code Playgroud)

zipmap()创建一个映射,region => {region,value}用于重复使用region最高索引的映射local.my_val(因此后面的值会覆盖以前的值)。

values()然后提取原始地图。

您还可以在revert()输入和输出列表中保留最低索引。

如果您关心value唯一性,只需相应地更改第一个参数zipmap(),但您可能需要将其转换为字符串。

如果您想保持不同(region,value)(例如,具有多个值的同一区域),那么它会变得有点棘手,因为您需要创建一个组合键:

locals {
  new_val = values(
    zipmap(
      [for m in local.my_val : join(":", [m.region, m.value])],
      local.my_val
    )
  )
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助 ;)