我可以使用地形数据创建 {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"]
中导出的属性,但上述算法稍微更简洁、更高效.
我想使用具有以下结构的地形数据获取地图:
{
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"]
中导出的属性,但上述算法稍微更简洁、更高效.