如何将for_each创建的所有资源ARN加入Terraform IAM策略文档?
如何将for_each创建的模块ARN全部传入IAM策略文档
当使用for_each批量创建模块后,module.compactor_sqs会变成一个键值对映射(map),而非单个模块实例,直接用列表投影[*]会触发类型错误。正确的写法是通过values()结合for表达式提取所有ARN:
data "aws_iam_policy_document" "generator_sqs_document" { statement { actions = ["sqs:*"] resources = [for sqs in values(module.compactor_sqs) : sqs.arn] } }
关键逻辑说明
values(module.compactor_sqs):提取映射中所有模块实例的值,返回一个模块实例的列表。for sqs in ... : sqs.arn:遍历列表中的每个模块实例,取出其.arn属性,最终生成一个由ARN字符串组成的列表,完全匹配resources参数对字符串列表的要求。
原写法错误原因
module.compactor_sqs是map类型,不存在顶层的.arn属性,因此module.compactor_sqs[*].arn会触发"Unsupported attribute"错误。- 即使强行使用
[*],也会生成嵌套列表(外层列表包裹内层ARN列表),不符合resources需要的字符串元素要求,导致"Incorrect attribute value type"错误。
内容的提问来源于stack exchange,提问作者ablaszkiewicz1
相关产品推荐
相关产品推荐

