
使用 Terraform 读取 AWS Resilience Hub V2 Systemaws_resiliencehubv2_system数据源完全指南【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_resiliencehubv2_system是 terraform-provider-aws 为 AWS Resilience Hub V2 服务提供的只读数据源用于按 ARN 读取已有的 System系统及其全部属性。本文以官方文档 website/docs/d/resiliencehubv2_system.html.markdown 为骨架结合仓库内数据源、资源与测试源码讲解参数、属性、底层 API 调用链与标签处理机制帮助你安全地在配置中引用既有系统而不产生任何资源变更。数据源概述只读引用既有 System在 Resilience Hub V2 中System 是承载业务韧性治理的顶层容器代表一个业务应用或平台其内部包含用户旅程User Journey与服务Service参见资源文档 website/docs/r/resiliencehubv2_system.html.markdown。与资源aws_resiliencehubv2_systemresource不同本数据源只执行读取它不创建、不更新、不删除任何对象适合在其他模块中复用已经由其他流程人或另一份配置创建好的系统信息例如把系统的 ARN、名称、system_id作为输入喂给下游资源。从源码看该数据源是一个基于 Terraform Plugin Framework 实现的框架级数据源注册注解位于 internal/service/resiliencehubv2/system_data_source.go// FrameworkDataSource(aws_resiliencehubv2_system, nameSystem) // Tags(identifierAttributearn) func newSystemDataSource(context.Context) (datasource.DataSourceWithConfigure, error) { return systemDataSource{}, nil }它通过arn唯一标识一个系统底层对应 Resilience Hub V2 的GetSystemAPI 调用。使用示例从 ARN 读取系统基础用法官方文档给出的最小用法只需一个必填参数arndata aws_resiliencehubv2_system example { arn arn:aws:resiliencehub:us-west-2:123456789012:system/example-system:abc123 }其中arn是系统的唯一标识格式形如arn:aws:resiliencehub:region:account-id:system/system-name:system-id。注意 ARN 末尾的:abc123是系统创建时生成的具体标识段实际值需以你在 AWS 控制台或 API 返回为准。推荐做法从同配置中的资源读取 ARN官方验证数据源正确性的验收测试internal/service/resiliencehubv2/testdata/System/data.basic/main.tf给出了一个更贴近实战的写法——先在同配置中定义资源再用aws_resiliencehubv2_system.test.arn作为数据源的输入避免手写 ARN 出错# tflint-ignore: terraform_unused_declarations data aws_resiliencehubv2_system test { arn aws_resiliencehubv2_system.test.arn } resource aws_resiliencehubv2_system test { name var.rName } variable rName { description Name for resource type string nullable false }这一模式的价值在于数据源与资源同源读取到的属性永远与资源当前状态一致适合做“读取-比对”或“跨模块传递元数据”的场景。指定区域region系统数据是分区域的若系统不在 Provider 默认区域中可用region显式指定provider aws { region us-east-1 } data aws_resiliencehubv2_system example { arn arn:aws:resiliencehub:us-west-2:123456789012:system/example-system:abc123 region us-west-2 }region的默认值取自 Provider 配置在源码层面数据源模型内嵌了framework.WithRegionModel见 internal/service/resiliencehubv2/system_data_source.go从而获得标准的region字段与区域覆盖能力。该能力同样体现在测试夹具 internal/service/resiliencehubv2/testdata/System/region_override/main_gen.tf 中。参数参考Argument Reference数据源共支持两个参数参数必需性类型说明arn必需string要读取的 System 的 ARNregion可选string该数据源实际发起请求的区域默认使用 Provider 配置中设置的区域arn在源码中被声明为自定义 ARN 类型internal/service/resiliencehubv2/system_data_source.gonames.AttrARN: fwschema.StringAttribute{ CustomType: fwtypes.ARNType, Required: true, },使用fwtypes.ARNType意味着 Terraform 会在计划阶段对arn做格式校验传入非法 ARN 会直接报错而不是等到 API 调用才失败这是写配置时可以依赖的静态防护。属性参考Attribute Reference除参数本身外数据源还会导出以下只读属性属性类型说明descriptionstring系统的描述信息kms_key_idstring系统的 KMS 密钥 ARN用于加密相关数据namestring系统名称organization_idstring该系统所属的 AWS Organizations 标识ou_idstring系统所属组织单元Organizational Unit的标识sharing_enabledbool是否启用了跨账户共享system_idstring用于跨账户使用而不暴露账户结构的系统 IDtagsmap(string)分配给该资源的标签映射在源码中除arn和region外其余属性均声明为Computed: trueinternal/service/resiliencehubv2/system_data_source.go说明它们完全由云端返回并写入状态用户不可配置names.AttrDescription: fwschema.StringAttribute{ Computed: true }, names.AttrKMSKeyID: fwschema.StringAttribute{ Computed: true }, names.AttrName: fwschema.StringAttribute{ Computed: true }, organization_id: fwschema.StringAttribute{ Computed: true }, ou_id: fwschema.StringAttribute{ Computed: true }, sharing_enabled: fwschema.BoolAttribute{ Computed: true }, system_id: fwschema.StringAttribute{ Computed: true }, names.AttrTags: tftags.TagsAttributeComputedOnly(),tags使用tftags.TagsAttributeComputedOnly()声明为只读标签属性——数据源只负责把云端标签读入状态不会对标签做任何写入。这也符合数据源的语义仅查询、不修改。源码实现解析一次读取背后的调用链数据源的Read方法internal/service/resiliencehubv2/system_data_source.go完整展示了读取流程从配置中读取arn通过d.Meta().ResilienceHubV2Client(ctx)获取该区域对应的 AWS 客户端调用共享查找函数findSystemByARN(ctx, conn, arn)用fwflex.Flatten(ctx, system, data)把 AWS SDK 返回的awstypes.System结构体扁平化为 Terraform 状态模型通过setTagsOut(ctx, system.Tags)将云端标签写入 Provider 的标签上下文调用resp.State.Set(ctx, data)落盘到 State。其中findSystemByARN与findSystem定义在资源文件 internal/service/resiliencehubv2/system.go它封装了 Resilience Hub V2 的GetSystemAPI并做了两类特殊处理资源不存在捕获ResourceNotFoundException并转换为retry.NotFoundError空结果当output或output.System为 nil 时返回tfresource.NewEmptyResultError()。也就是说数据源与资源共用同一套查找逻辑保证了“资源读取”和“数据源读取”对同一个系统的解析口径完全一致。同时数据源对错误做了smerr.ID, arn的上下文增强报错信息会带上具体的系统 ARN便于定位问题。与资源及 List 资源的联动关系理解该数据源时建议把它放入 Resilience Hub V2 的完整资源体系中看待资源aws_resiliencehubv2_systeminternal/service/resiliencehubv2/system.go负责创建、更新、删除系统可通过name、description、kms_key_id、sharing_enabled、tags等参数管理系统数据源aws_resiliencehubv2_system本文主题只读查询单个系统List 资源internal/service/resiliencehubv2/system_list.go基于ListSystemsAPI 分页枚举区域内的全部系统支持include_resource选项在枚举时逐个拉取完整详情。从源码结构看List 资源直接内嵌了systemResourcetype systemListResource struct { systemResource; ... }三者共享systemResourceModel与flatten等实现属性口径一致。因此无论你是用数据源读单个系统、用资源管理系统还是用 List 资源批量发现系统得到的字段语义都是统一的。标签行为的实测证据仓库中的验收测试为“数据源能读到什么标签”提供了直接证据分布在 internal/service/resiliencehubv2/testdata/System/ 目录下的几个夹具中data.tags/main_gen.tf资源显式设置tags验证数据源能读到资源级标签data.tags_defaults/main_gen.tfProvider 配置default_tags验证数据源读到的tags包含从 Provider 继承的默认标签data.tags_ignore/main_gen.tfProvider 配置ignore_tags验证被忽略的标签不会出现在数据源输出中。标签相关测试用例同时覆盖了tags计算属性tagsComputed1、tagsComputed2等场景见 internal/service/resiliencehubv2/system_data_source_tags_gen_test.go说明数据源的标签读取行为与资源标签体系default_tags、ignore_tags完整对齐。如何验证数据源的验收测试仓库为该数据源编写了独立的验收测试TestAccResilienceHubV2SystemDataSource_basicinternal/service/resiliencehubv2/system_data_source_test.go。它同时创建同名资源与数据源然后用statecheck.CompareValuePairs逐一比对两者在arn、description、kms_key_id、name、system_id上的取值是否完全一致ConfigStateChecks: []statecheck.StateCheck{ statecheck.CompareValuePairs(dataSourceName, tfjsonpath.New(names.AttrARN), resourceName, tfjsonpath.New(names.AttrARN), compare.ValuesSame()), statecheck.CompareValuePairs(dataSourceName, tfjsonpath.New(names.AttrDescription), resourceName, tfjsonpath.New(names.AttrDescription), compare.ValuesSame()), statecheck.CompareValuePairs(dataSourceName, tfjsonpath.New(names.AttrKMSKeyID), resourceName, tfjsonpath.New(names.AttrKMSKeyID), compare.ValuesSame()), statecheck.CompareValuePairs(dataSourceName, tfjsonpath.New(names.AttrName), resourceName, tfjsonpath.New(names.AttrName), compare.ValuesSame()), statecheck.CompareValuePairs(dataSourceName, tfjsonpath.New(system_id), resourceName, tfjsonpath.New(system_id), compare.ValuesSame()), },这意味着官方保证数据源读到的核心属性与资源状态完全同源。如果你想在本地确认数据源行为可在有 AWS 凭证且已创建 System 的环境中执行该验收测试测试需要真实 AWS 资源属于接受性测试默认不随单元测试运行。常见使用场景小结结合文档与源码aws_resiliencehubv2_system数据源的典型落地场景包括跨模块传递系统元数据把已存在的系统 ARN 作为输入读取name、system_id、sharing_enabled等属性供下游资源引用避免硬编码读取-比对校验在同一配置中同时声明资源与数据源利用一致的属性口径做一致性校验或生成报告组织信息复用通过organization_id与ou_id获取系统的组织归属信息用于权限或合规类配置标签驱动治理读取系统的tags含 Provider 默认标签配合ignore_tags做标签审计。需要留意的前提是数据源本身只读无法创建系统若系统中尚不存在目标 ARN读取将报错资源不存在。请在引用前确认系统已在目标区域创建完成。总结aws_resiliencehubv2_system数据源是 terraform-provider-aws 中访问 Resilience Hub V2 系统的标准只读入口一个必填arn参数 一个可选region参数即可获得名称、描述、KMS 密钥、组织信息、共享开关、system_id与标签等全部关键属性。通过源码可以看到它的底层是对GetSystemAPI 的封装与资源共享查找与扁平化逻辑并通过 Plugin Framework 的 ARN 自定义类型在计划阶段完成输入校验。配合资源文档 website/docs/r/resiliencehubv2_system.html.markdown、List 实现与验收测试你可以放心地在配置中以声明式方式消费既有系统信息。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考