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

Terraform如何从AWS组织提取合规包指定排除账号的ID

实现方案

1. 加载YAML配置为Terraform本地变量

假设你的YAML配置文件名为aws_config.yaml,首先用Terraform内置函数解析加载配置,同时提前预处理组织账号数据提升查询效率:

locals {
  # 解析YAML配置文件
  aws_config = yamldecode(file("${path.module}/aws_config.yaml"))
  # 提取所有合规包模板配置
  conformance_pack_templates = local.aws_config.AWSConfig.conformance_pack_templates
  # 按账号名称分组,同名称的账号ID统一归集为列表,适配重名账号场景
  accounts_by_name = {
    for account in data.aws_organizations_organization.org.accounts :
    account.name => account.id...
  }
}

2. 组装目标格式的结果

通过Terraform for表达式遍历模板配置,匹配对应排除账号ID:

locals {
  final_excluded_accounts = [
    for pack in local.conformance_pack_templates : {
      # 提取合规包模板名称
      template = keys(pack)[0]
      # 匹配所有需要排除的账号ID
      excluded_accounts = flatten([
        for exclude_name in pack[keys(pack)[0]][0].excluded_accounts :
        lookup(local.accounts_by_name, exclude_name, [])
      ])
    }
  ]
}

3. 输出验证

如果需要查看最终结果,可添加如下输出块:

output "template_excluded_account_ids" {
  value = local.final_excluded_accounts
}

逻辑说明

  • 提前将全量账号按名称分组,避免每次查询都遍历全量账号列表,提升效率
  • 匹配账号名称时用lookup函数处理不存在的名称,无匹配时返回空列表不会报错
  • 自动归集所有重名账号的ID,符合示例中多个同名closed账号都被纳入排除列表的需求

内容的提问来源于stack exchange,提问作者Dani Wol.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:03