Terraform AWS Provider 数据源 aws_organizations_organizational_units 完全指南:枚举父 OU 下的直接子组织单元
IaC云原生基础设施【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址https://gitcode.com/GitHub_Trending/te/terraform-provider-aws点击查看免费下载导读aws_organizations_organizational_units是 Terraform AWS Provider 提供的一个只读数据源用于在 AWS Organizations 组织架构中获取指定父组织单元OU下的全部直接子 OU 列表。它只返回下一层的 OU不会递归返回所有后代。读完本文你将掌握该数据源的全部参数与返回属性、它与单个 OU 数据源及后代 OU 数据源的差异、底层 AWS API 调用与分页实现原理并能直接在真实 Terraform 配置中组合使用。数据源定位与核心语义该数据源属于 Organizations组织服务子分类定义于 website/docs/d/organizations_organizational_units.html.markdown。其核心语义是只返回指定父 OU 的直接子 OUimmediate children不返回更深层的后代。这意味着当组织层级为根(/) → OU-A → OU-B → OU-C时用parent_id OU-A查询只会得到OU-B而OU-C不在结果中。如果需要递归获取某父 OU 之下的全部 OU应使用同模块的aws_organizations_organizational_unit_descendant_organizational_units数据源文档见 website/docs/d/organizations_organizational_unit_descendant_organizational_units.html.markdown。由于 Organizations 服务要求使用组织的**管理账号management account**进行读取使用该数据源的前提是当前 Terraform 凭证对管理账号具有organizations:ListOrganizations、organizations:ListOrganizationalUnitsForParent等权限。参数说明Argument Reference该数据源仅有一个参数参数是否必填类型说明parent_idRequiredstring父组织单元或根的 ID关于parent_id的取值需要结合仓库源码理解其格式约束。在 internal/service/organizations/organizational_unit.go#L77-L82创建 OU 资源的同源校验中parent_id使用正则校验^(r-[0-9a-z]{4,32})|(ou-[0-9a-z]{4,32}-[0-9a-z]{8,32})$即父 ID 只有两种合法形态根 IDr-前缀 4~32 位小写字母数字例如r-1234abcdOU IDou-前缀 4~32 位 - 8~32 位小写字母数字例如ou-abc1-2xyz3456。获取根 ID 最典型的做法是配合aws_organizations_organization数据源的roots[0].id属性其实现见 internal/service/organizations/organization_data_source.go#L152 与flattenRoots详见下文示例。属性说明Attribute Reference除入参外数据源导出以下属性属性类型说明childrenlist子组织单元列表列表元素包含三个子属性见下children.*.arnstring每个子 OU 的 ARNAmazon Resource Namechildren.*.namestring每个子 OU 的名称children.*.idstring每个子 OU 的 IDidstring父标识符即入参parent_id的值并非子 OU 的 ID注意id属性的语义数据源自身以parent_id作为 Terraform 状态 ID源码见 internal/service/organizations/organizational_units_data_source.go#L72 的d.SetId(parentID)这与返回单个子 OU 的id含义完全不同使用时需避免混淆。children中每个元素只有arn、name、id三个字段源码 Schema 见 internal/service/organizations/organizational_units_data_source.go#L32-L51不包含账户信息如需查看某 OU 下的成员账户应使用aws_organizations_organizational_unit_child_accounts数据源。示例用法1. 基本用法枚举根下的直接子 OU以下示例取自文档核心场景先读取组织信息拿到根 ID再枚举根下的所有直接子 OUdata aws_organizations_organization org {} data aws_organizations_organizational_units ou { parent_id data.aws_organizations_organization.org.roots[0].id }查询结果可通过data.aws_organizations_organizational_units.ou.children遍历output ou_names { value [for ou in data.aws_organizations_organizational_units.ou.children : ou.name] } output ou_ids { value { for ou in data.aws_organizations_organizational_units.ou.children : ou.name ou.id } }2. 与 OU 资源联动基于既有 OU 枚举其子层直接使用已创建的aws_organizations_organizational_unit资源文档见 website/docs/d/organizations_organizational_unit.html.markdown作为父节点resource aws_organizations_organizational_unit dev { name dev parent_id data.aws_organizations_organization.org.roots[0].id } data aws_organizations_organizational_units dev_children { parent_id aws_organizations_organizational_unit.dev.id }此时dev_children.children即为devOU 下的直接子 OU若dev下尚无 OUchildren为空列表。3. 与单 OU 数据源组合先枚举、再按名称精确匹配当需要按名称精确读取某个 OU 时可先枚举子 OU 得到id再交给aws_organizations_organizational_unit数据源其实现见 internal/service/organizations/organizational_unit_data_source.go按parent_id name精确过滤data aws_organizations_organizational_units root_children { parent_id data.aws_organizations_organization.org.roots[0].id } locals { target_ou_id [for ou in data.aws_organizations_organizational_units.root_children.children : ou.id if ou.name production][0] } data aws_organizations_organizational_unit production { parent_id data.aws_organizations_organization.org.roots[0].id name production }4. 递归需求改用后代 OU 数据源若目标是父 OU 及其以下全部 OU应改用aws_organizations_organizational_unit_descendant_organizational_unitsdata aws_organizations_organizational_unit_descendant_organizational_units all { parent_id aws_organizations_organizational_unit.dev.id }该数据源内部对 OU 树执行递归遍历实现见 internal/service/organizations/organizational_units_descendant_organizational_units_data_source.go#L78-L99 的findAllOrganizationalUnitsForParentAndBelow与本文主题数据源的仅直接子层语义形成互补。源码级原理剖析底层 API 调用链数据源的 Read 逻辑internal/service/organizations/organizational_units_data_source.go#L61-L78执行以下流程从 Provider 元数据中获取 Organizations 客户端meta.(*conns.AWSClient).OrganizationsClient(ctx)读取parent_id入参调用findOrganizationalUnitsForParentByID查询直接子 OU出错时返回sdkdiag.AppendErrorf格式化诊断信息成功后将id设为parent_id并把结果通过flattenOrganizationalUnits写入children。其最终调用的 AWS API 是ListOrganizationalUnitsForParent见 internal/service/organizations/organizational_units_data_source.go#L80-L86请求体仅包含ParentId一个字段。分页处理AWS 的ListOrganizationalUnitsForParent接口是分页的单次最多返回约 20 条记录。源码使用 SDK 官方分页器遍历全部结果internal/service/organizations/organizational_units_data_source.go#L98-L123pages : organizations.NewListOrganizationalUnitsForParentPaginator(conn, input) for pages.HasMorePages() { page, err : pages.NextPage(ctx) // ... for _, v : range page.OrganizationalUnits { if filter(v) { output append(output, v) } } }这意味着即使父 OU 下有成百上千个子 OU数据源也能完整返回无需担心结果截断。异常处理父节点不存在当parent_id指向的 OU/根不存在或已删除时AWS 会返回ParentNotFoundException。源码将其包装为retry.NotFoundErrorinternal/service/organizations/organizational_units_data_source.go#L105-L109进而表现为未找到错误便于 Terraform 上层统一处理与排查。结果扁平化flattenOrganizationalUnitsinternal/service/organizations/organizational_units_data_source.go#L125-L141将 AWS SDK 返回的[]awstypes.OrganizationalUnit逐条转换为{arn, id, name}三字段的 Terraform 列表当结果为空时返回nil即children []。测试用例佐证仓库自带的接受性测试internal/service/organizations/organizational_units_data_source_test.go验证了数据源的核心行为data aws_organizations_organization current {} resource aws_organizations_organizational_unit test { name var.rName parent_id data.aws_organizations_organization.current.roots[0].id } data aws_organizations_organizational_units current { parent_id aws_organizations_organizational_unit.test.parent_id } data aws_organizations_organizational_units test { parent_id aws_organizations_organizational_unit.test.id }测试断言internal/service/organizations/organizational_units_data_source_test.go#L31-L34以根为父节点时children.#大于 0根下必然存在至少一个已创建的 OU以新创建的空 OU 为父节点时children.#等于 0。同时测试通过acctest.PreCheckOrganizationManagementAccountinternal/service/organizations/organizational_units_data_source_test.go#L24强制要求运行在组织管理账号下——这再次印证了该数据源的使用前置条件。常见问题与排查查询结果为空确认parent_id对应的父节点下确实存在子 OU空列表是合法结果不代表出错。权限不足 / 非管理账号ListOrganizationalUnitsForParent需要管理账号权限使用组织的委派管理员或成员账号凭证会报错。测试中也以PreCheckOrganizationManagementAccount强制校验。parent_id格式错误根 ID 为r-前缀、OU ID 为ou-前缀注意从roots[0].id取根 ID 而非直接拼接。误以为返回全部后代本数据源只返回直接子层需要递归结果时切换到aws_organizations_organizational_unit_descendant_organizational_units。混淆id属性数据源的id是父标识符parent_id不是子 OU 的 ID子 OU 的 ID 需从children.*.id读取。总结aws_organizations_organizational_units是构建 AWS 组织管理自动化的重要只读构件一个必填参数parent_id返回children列表含arn/name/id。底层基于ListOrganizationsForParentAPI 分页拉取仅返回直接子层父节点不存在时给出明确的 NotFound 语义。配合aws_organizations_organization取根 ID、aws_organizations_organizational_unit单 OU 精确查询与后代 OU 数据源递归查询即可覆盖从根到任意层级 OU 的枚举与定位需求。赞分享IaC云原生基础设施【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址https://gitcode.com/GitHub_Trending/te/terraform-provider-aws点击查看免费下载相关推荐TestDisk与PhotoRec完整指南免费开源数据恢复工具如何救回你的磁盘与照片TestDisk与PhotoRec完整指南免费开源数据恢复工具如何救回你的磁盘与照片 凌晨一点老陈看着屏幕上那句刺眼的磁盘结构损坏且无法读取整个人都清IaC云原生基础设施terraform-provider-aws 数据源 aws_organizations_policies 完全指南批量枚举组织策略与 ID 管理terraform provider aws 数据源 aws_organizations_policies 完全指南批量枚举组织策略与 ID 管理 导读 awIaC云原生基础设施Terraform AWS Provider 数据源 aws_organizations_organizational_unit 实战指南按父节点与名称查询组织单元Terraform AWS Provider 数据源 aws_organizations_organizational_unit 实战指南按父节点与名称查询组IaC云原生基础设施创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

gbrain 嵌入迁移完全指南:用 `gbrain migrate embeddings` 安全切换 Embedding 供应商

gbrain 嵌入迁移完全指南:用 `gbrain migrate embeddings` 安全切换 Embedding 供应商

gbrain 嵌入迁移完全指南:用 gbrain migrate embeddings 安全切换 Embedding 供应商 【免费下载链接】gbrain Garrys Opinionated OpenClaw/Hermes Agent Brain 项目地址: https://gitcode.com/gh_mirrors/gb/gbrain 导读 gbrain migrate embeddings 是 gbr…

2026/9/19 14:35:31 阅读更多 →
XRD物相分析实战:HighScore3.0核心操作与常见问题排查

XRD物相分析实战:HighScore3.0核心操作与常见问题排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:10:55 阅读更多 →
双目相机标定全流程详解:从棋盘格到SGBM立体匹配与点云生成

双目相机标定全流程详解:从棋盘格到SGBM立体匹配与点云生成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 14:35:31 阅读更多 →

最新新闻

IsaacLab 从零到跑通:让 Franka 抓住立方体的上手地图

IsaacLab 从零到跑通:让 Franka 抓住立方体的上手地图

IsaacLab 从零到跑通:让 Franka 抓住立方体的上手地图 【免费下载链接】IsaacLab Unified framework for robot learning with multi-physics/renderer support 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab Franka 悬在桌面上,一…

2026/9/20 18:10:15 阅读更多 →
docker-mailserver 的 MTA-STS 实战指南:出站 STARTTLS 强制策略、DANE 冲突与入站配置

docker-mailserver 的 MTA-STS 实战指南:出站 STARTTLS 强制策略、DANE 冲突与入站配置

docker-mailserver 的 MTA-STS 实战指南:出站 STARTTLS 强制策略、DANE 冲突与入站配置 【免费下载链接】docker-mailserver Production-ready fullstack but simple mail server (SMTP, IMAP, LDAP, Antispam, Antivirus, etc.) running inside a container. 项目…

2026/9/20 18:10:15 阅读更多 →
Claude Code 桌面端 Fork 沙盒改代码,Base URL 填 TaoToken

Claude Code 桌面端 Fork 沙盒改代码,Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:10:15 阅读更多 →
Context length 超限?TaoToken + Cline 这样核对模型 ID 与上下文窗口

Context length 超限?TaoToken + Cline 这样核对模型 ID 与上下文窗口

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:10:15 阅读更多 →
FlashKDA gate偏置加载路径完整解析:如何读取A_log与dt_bias

FlashKDA gate偏置加载路径完整解析:如何读取A_log与dt_bias

FlashKDA gate偏置加载路径完整解析:如何读取A_log与dt_bias 【免费下载链接】FlashKDA FlashKDA: high-performance Kimi Delta Attention kernels 项目地址: https://gitcode.com/GitHub_Trending/fl/FlashKDA FlashKDA 是一个基于 CUTLASS 构建的高性能 K…

2026/9/20 18:10:15 阅读更多 →
Mac 上安装 Claude Code 完整指南:环境配置与避坑实践

Mac 上安装 Claude Code 完整指南:环境配置与避坑实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:09:12 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →