Terraform中如何将模块创建的IAM用户列表传入用户组模块?
解决Terraform批量创建IAM用户并加入用户组的问题
问题原因
通过for_each = var.finance_users批量创建IAM用户时,module.iam_finance_users会变成映射(map)结构的模块集合,而非单个模块实例。直接访问module.iam_finance_users.iam_user_name会触发错误,因为Terraform无法定位到具体的单个用户实例属性。
解决方法
使用Terraform的values()函数提取所有模块实例,再通过列表推导式获取每个实例的iam_user_name属性,生成符合group_users参数要求的用户名列表。
修改后的用户组模块代码如下:
module "iam_group_finance" { source = "terraform-aws-modules/iam/aws//modules/iam-group-with-policies" version = "5.9.1" name = "finance" # 提取所有批量创建的IAM用户名 group_users = values(module.iam_finance_users)[*].iam_user_name attach_iam_self_management_policy = true custom_group_policy_arns = [ module.iam_read_write_policy.arn, ] }
代码说明
values(module.iam_finance_users):将映射类型的模块实例集合转换为列表,包含所有创建的IAM用户模块实例[*].iam_user_name:列表推导式,遍历列表中的每个模块实例,提取其iam_user_name属性,最终生成所有用户名的列表
内容的提问来源于stack exchange,提问作者eljoeyjojo
相关产品推荐
相关产品推荐

