我可以使用地形数据创建 {instanceid: valueOfNameTag} 的地图吗?

Can I create a map of {instanceid: valueOfNameTag} using terraform data?

我想使用具有以下结构的地形数据获取地图:

{
  instance-id(e.g. i-xxxx): ValueOfNameTag(e.g. MongoDB)
}

我可以像下面这样单独获取实例详细信息

data "aws_instance" "test" {
  instance_id = "i-0ecb3c2fb4436b6fe"
}

但不知道为所有人做这件事并从中创建地图。

这基本上是一个三步过程。第一步(根据评论已经存在)是检索所需的实例 ID 列表:

data "aws_instances" "this" {
  # arguments to select specific subset of instances
}

list(string)个实例ID将存储在导出的资源属性ids中。

第二步是检索每个单独实例的标签:

data "aws_instance" "this" {
  # iterate over subset of desired instances by ID
  for_each = toset(data.aws_instances.this.ids)

  instance_id = each.value
}

每个实例的标签将存储在导出的资源属性 tags 中,因此可以按照 Terraform HCL2 DSL 中的正常方式通过命名空间 data.aws_instance.this["<instance id>"].tags 进行访问。

第三步,进行数据转换,构造一个map,key为实例ID,value为tag的value。问题中给出的示例是 Name 标记的值,因此这就是我们将在示例中使用的值:

locals {
  instance_name = { for id, attributes in data.aws_instance.this : id => attributes.tags["Name"] }
}

以及它们各自 Name 标记所需的 map 个实例 ID 将按预期存储在 local.instance_name 中。您也可以在 for lambda 表达式中遍历 data.aws_instances.this.ids list(string) 并映射到 data.aws_instance.this[each.value].tags["Name"] 中导出的属性,但上述算法稍微更简洁、更高效.