我可以使用 terraform 数据创建 instanceid: valueOfNameTag 的地图吗?
Posted
技术标签:
【中文标题】我可以使用 terraform 数据创建 instanceid: valueOfNameTag 的地图吗?【英文标题】:Can I create a map of instanceid: valueOfNameTag using terraform data?我可以使用 terraform 数据创建 instanceid: valueOfNameTag 的地图吗? 【发布时间】:2021-11-25 19:36:26 【问题描述】:我想使用具有以下结构的 terraform 数据获取地图:
instance-id(e.g. i-xxxx): ValueOfNameTag(e.g. MongoDB)
我可以像下面这样单独获取实例详细信息
data "aws_instance" "test"
instance_id = "i-0ecb3c2fb4436b6fe"
但不知道如何为所有人做这件事并从中创建一个地图。
【问题讨论】:
如果您正在管理资源,这存在于 Terraform 状态。您不是在管理资源吗? @MattSchuchard 不,我不管理实例。他们已经在那里了。我想使用数据源来获取详细信息,然后创建一个我可以使用的地图。 您如何存储实例的 ID 列表? @MattSchuchard 我正在使用数据“aws_instances”。这将返回实例 ID 列表。 【参考方案1】:这基本上是一个三步过程。第一步(根据 cmets 已经存在)是检索所需的实例 ID 列表:
data "aws_instances" "this"
# arguments to select specific subset of instances
实例 ID 的list(string)
将存储在导出的资源属性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为instance ID,tag为value。问题中给出的示例是针对 Name
标记的值,因此我们将在示例中使用:
locals
instance_name = for id, attributes in data.aws_instance.this : id => attributes.tags["Name"]
以及所需的map
实例ID 到它们各自的Name
标记将按预期存储在local.instance_name
中。您也可以在 for
lambda 表达式中迭代 data.aws_instances.this.ids
list(string)
并映射到从 data.aws_instance.this[each.value].tags["Name"]
导出的属性,但上述算法更简洁,效率更高。
【讨论】:
谢谢,马特!我还有一个问题,你可能想看看***.com/q/69454592/10065458以上是关于我可以使用 terraform 数据创建 instanceid: valueOfNameTag 的地图吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 创建一个 Azure Active Directory 自定义域
我可以使用 Terraform 创建 GCP API 密钥吗?
如何编写 terraform 代码来为过多的数据库连接创建 aws_cloudwatch_metric_alarm?