You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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]
  }
}

关键逻辑说明

  1. values(module.compactor_sqs):提取映射中所有模块实例的值,返回一个模块实例的列表。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:30:51