Terraform同文件中如何通过其他块数据引用多实例
Terraform多实例关联引用问题解决方法
你的核心问题是用for_each创建的多实例资源不能直接通过.id引用——这类资源本质是键值对映射,Terraform无法自动识别你要取哪个实例的属性。另外你额外定义的data "xxiam_service_id"完全多余,直接引用已创建的xxiam_service_id.service实例即可。
修正后的代码如下:
resource "xxiam_access_group" "acc" { for_each = toset(var.ag_name) name = each.key description = var.ag_description } resource "xxiam_service_id" "service" { for_each = toset(var.ag_name) name = "service_id_${each.key}" description = "Service accessing ag ${each.key}" } resource "xxiam_access_group_members" "acname" { # 与前面的资源使用相同的for_each键集,保证每个访问组对应一个成员关联 for_each = toset(var.ag_name) access_group_id = xxiam_access_group.acc[each.key].id # 直接引用对应key的service_id实例ID iam_service_ids = [xxiam_service_id.service[each.key].id] }
关键说明:
- 所有需要关联的资源必须使用相同的
for_each键集合(这里是toset(var.ag_name)),这样每个each.key就能对应到一组关联的access_group和service_id实例。 - 引用多实例资源的属性时,必须通过
[each.key]指定具体实例,比如xxiam_access_group.acc[each.key].id,而不是直接写xxiam_access_group.acc.id。 - 移除不必要的
data块:既然已经通过resource创建了service_id实例,直接引用其属性即可,不需要再用data源查询,避免资源定义冗余和可能的状态不一致。
内容的提问来源于stack exchange,提问作者X T
相关产品推荐
相关产品推荐

