You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Terraform的aws_iam_user数据源提取ARN并组装为列表?

解决Terraform提取IAM用户ARN列表的问题

问题分析

当使用for_each配置aws_iam_user数据源时,返回的data.aws_iam_user.this是键为用户名、值为用户对象的Map(对象类型),而非列表。你尝试用数字索引[0]访问或错误的列表推导逻辑,导致Terraform报错。

正确实现代码

调整本地变量的ARN提取逻辑,直接遍历Map的values或用列表推导式获取ARN:

# 定义要查询的IAM用户列表
locals {
  users = ["user1", "user2"]
}

# 批量查询IAM用户信息
data "aws_iam_user" "this" {
  for_each  = { for user in local.users : user => user }
  user_name = each.value
}

# 提取所有用户的ARN到列表
locals {
  # 方式1:列表推导式遍历Map
  arn_list = [for user in data.aws_iam_user.this : user.arn]
  
  # 方式2:用values函数转换Map为列表后提取ARN(更简洁)
  # arn_list = values(data.aws_iam_user.this)[*].arn
}

# 输出验证结果
output "user_arn" {
  value = local.arn_list
}

关键说明

  • for_each生成的数据源是Map结构,键为你定义的用户名,值为对应的IAM用户对象。
  • values(data.aws_iam_user.this)会将Map转换为包含所有用户对象的列表,再通过[*].arn批量提取每个对象的arn属性。
  • 列表推导式[for user in data.aws_iam_user.this : user.arn]直接遍历Map的每个值(用户对象),提取ARN。

内容的提问来源于stack exchange,提问作者tanfei12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:21:17