如何从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
相关产品推荐
相关产品推荐

