如何用单个Terraform资源块批量绑定IAM策略至多个IAM角色?
问题解决:Terraform批量绑定IAM策略到多个角色
你的代码无法生效的核心原因是没有启用多实例创建逻辑,count.index仅在资源块声明count参数时才会生效,默认情况下Terraform只会创建单个资源实例,无法遍历你的角色名称列表。
以下是两种可行的修改方案:
方案1:使用count遍历列表
resource "aws_iam_role_policy_attachment" "iam-role" { count = length(var.aws_iam_role_names) role = "${var.aws_iam_role_names[count.index]}-iam-role" policy_arn = var.some_policy_arn }
count = length(var.aws_iam_role_names)表示根据角色列表的长度创建对应数量的资源实例count.index对应列表的索引位置,依次取到每个角色名称并拼接成完整的角色名
方案2:使用for_each(推荐)
resource "aws_iam_role_policy_attachment" "iam-role" { for_each = toset(var.aws_iam_role_names) role = "${each.value}-iam-role" policy_arn = var.some_policy_arn }
toset(var.aws_iam_role_names)将列表转换为集合,确保元素唯一each.value直接取到每个角色名称,资源实例的标识符是角色名称而非索引,当列表元素调整(如删除、新增、排序)时,不会导致无关资源实例重建,状态管理更稳定
额外注意
请确保var.some_policy_arn已正确定义,例如在vars.tf中添加:
variable "some_policy_arn" { type = string description = "ARN of the IAM policy to attach" }
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

