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

Terraform for循环引用变量批量生成AWS ARN报错排查

问题根因

你遇到的报错和逻辑错误来自两点:

  • aws_arn 数据源的设计用途是解析单个已存在的完整ARN,拆分出账号ID、区域、服务名等拆分属性,本身不支持批量传入账号列表生成ARN,你给account、arn参数传列表类型值本身就不符合该数据源的参数要求。
  • 引用资源时直接传入整个资源对象(data.aws_arn.SrcArn),没有指定具体要取的属性,Terraform无法识别你要引用资源的哪个字段。
正确实现方案

你不需要依赖aws_arn数据源生成ARN列表,直接用本地值拼接是最简单高效的方案:

variable "acct" {
  type    = list(string)
  default = ["111111111111", "22222222222"]
}

locals {
  # 批量拼接所有账号对应的日志服务ARN
  source_arns = [for acc in var.acct : "arn:aws:logs:us-east-1:${acc}:*"]
}

如果你后续需要解析ARN的拆分属性,必须配合count参数批量生成aws_arn数据源实例,不能直接给单个数据源传列表:

data "aws_arn" "src_arn" {
  count = length(var.acct)
  arn   = "arn:aws:logs:us-east-1:${var.acct[count.index]}:*"
}

# 该方式生成的ARN列表可通过 data.aws_arn.src_arn[*].arn 获取
condition块引用方法

IAM策略条件的ArnLike校验本身支持传入字符串列表做匹配,只要给values传入字符串类型的ARN列表即可,不能直接传入整个资源对象:

  • 用本地值生成列表的引用方式:
condition {
  test     = "ArnLike"
  values   = local.source_arns
  variable = "aws:SourceArn"
}
  • 用count批量生成数据源的引用方式:
condition {
  test     = "ArnLike"
  values   = data.aws_arn.src_arn[*].arn
  variable = "aws:SourceArn"
}

内容的提问来源于stack exchange,提问作者Devang Sanghani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:48:15