Terraform的aws_iam_policy_document中resources块嵌套for循环实现
报错原因
你当前的写法生成了三层嵌套的列表结构,而aws_iam_policy_document的resources属性要求输入一维字符串列表,类型不匹配触发报错。你原有代码每一层循环都额外加了方括号,最终返回的结构是[[["arn:aws:a4b::11111111111:*"], ["arn:aws:access-analyzer::11111111111:*"]...]],不符合字段要求。
解决方法
方案1:用flatten函数拍平嵌套列表
在原有代码外层包flatten()函数,同时去掉最内层多余的方括号,把多层嵌套列表压成一维字符串列表:
resources = flatten([ for account in var.all_accounts : [ for service in var.all_services : "arn:aws:${service}::${account}:*" ] ])
方案2:直接用双重for循环生成一维列表(更推荐)
用Terraform原生支持的多迭代器for循环语法,不需要嵌套列表,自动展开两个列表的所有组合生成一维结果:
resources = [ for account in var.all_accounts : for service in var.all_services : "arn:aws:${service}::${account}:*" ]
该写法兼容Terraform 0.12及以上版本,无需额外的拍平操作,执行效率更高。
内容的提问来源于stack exchange,提问作者Michael003
相关产品推荐
相关产品推荐

