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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:06:03