使用 `aws_networkmanager_core_network` 数据源查询 AWS Network Manager 核心网络详情

使用 `aws_networkmanager_core_network` 数据源查询 AWS Network Manager 核心网络详情 使用aws_networkmanager_core_network数据源查询 AWS Network Manager 核心网络详情【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本指南以 Terraform AWS Provider 中的aws_networkmanager_core_network数据源为核心讲解如何按 ID 查询 AWS Network Manager 核心网络Core Network的完整配置快照包括边缘edges、网段segments与网络功能组network function groups等动态属性并结合仓库源码说明其底层读取链路与状态机帮助读者在既有核心网络之上构建可复用的 Terraform 配置。数据源概述与适用场景aws_networkmanager_core_network是 Terraform AWS Provider 为 AWS Network Manager 服务提供的数据源Data Source。与资源Resource负责创建和管理核心网络不同数据源的角色是只读查询给定一个核心网络 ID它将返回该核心网络的 ARN、创建时间、所属全球网络Global Network、边缘位置、网段划分等全部关键信息供同一配置中的其他资源引用。典型应用场景包括在已有核心网络可能由其他团队或 Terraform 之外的流程创建之上动态读取其global_network_id、segments等值用于构建 VPC Attachment、Transit Gateway 路由表 Attachment 等下游资源读取核心网络当前state用于条件判断或输出展示在多区域部署中利用edges属性核对边缘位置与 ASN 分配。从源码看该数据源基于 Terraform Plugin Framework 实现而非旧版 SDKv2在服务包注册表中以aws_networkmanager_core_network名称注册定义于 internal/service/networkmanager/core_network_data_source.go并在 internal/service/networkmanager/service_package_gen.go 中由FrameworkDataSources()导出。基本用法在 Terraform 配置中声明数据源并指定core_network_id即可data aws_networkmanager_core_network example { core_network_id core-network-0123456789abcdef0 }core_network_id是唯一必填参数其取值来自核心网络的 ID形如core-network-xxxxxxxxxxxxxxxxx通常在创建资源后通过aws_networkmanager_core_network.example.id获得也可直接手写已知 ID。完整实战示例创建后查询结合仓库中 core_network_data_source_test.go 的测试配置推荐将数据源与资源联合使用先创建全球网络与核心网络再用数据源读取并校验resource aws_networkmanager_global_network test { description example global network tags { Name example } } data aws_networkmanager_core_network_policy_document test { core_network_configuration { asn_ranges [64512-65534] edge_locations { location us-west-2 asn 64555 } edge_locations { location us-east-1 asn 64556 } } segments { name segment1 edge_locations [us-west-2, us-east-1] } segments { name segment2 edge_locations [us-west-2] } } resource aws_networkmanager_core_network test { global_network_id aws_networkmanager_global_network.test.id description example core network create_base_policy true base_policy_document data.aws_networkmanager_core_network_policy_document.test.json tags { Name example } } data aws_networkmanager_core_network test { core_network_id aws_networkmanager_core_network.test.id depends_on [aws_networkmanager_core_network_policy_attachment.test] }提示如果核心网络包含 VPC 等 Attachment策略文档需要先进入LIVE状态才能完成附加。首次执行terraform apply时建议将create_base_policy设为true具体可参见 aws_networkmanager_core_network 资源文档。Argument Reference参数说明参数是否必填说明core_network_idRequired必填核心网络的 ID。数据源不接受其他任何输入参数所有其他信息均为计算属性Computed由 Provider 在读取时从 AWS 侧获取。Attribute Reference导出属性数据源在查询成功后除core_network_id外还会导出以下属性属性类型说明arnstring核心网络的 ARN。created_atstringRFC3339 时间戳核心网络的创建时间。descriptionstring核心网络的描述。edgeslist of object核心网络内的边缘详见 edges 属性说明。global_network_idstring核心网络所属全球网络Global Network的 ID。network_function_groupslist of object与核心网络关联的网络功能组详见 network_function_groups 属性说明。segmentslist of object核心网络内的网段详见 segments 属性说明。statestring核心网络的当前状态。tagsmap of string分配给资源的标签映射。在 core_network_data_source.go 的coreNetworkDataSourceModel结构体中这些属性以tfsdk标签与 schema 一一对应created_at使用timetypes.RFC3339自定义类型解析时间戳edges、network_function_groups、segments则通过fwtypes.ListNestedObjectValueOf[...]建模为嵌套对象列表。状态state取值说明state属性反映核心网络的当前生命周期状态。从 core_network.go 的等待器实现可以推断核心网络会经历CREATING→AVAILABLE→UPDATING→DELETING等状态源码中还定义了过渡态PENDING。其中AVAILABLE表示核心网络已就绪、策略已生效可以承载 AttachmentUPDATING表示正在应用新的策略变更集DELETING表示正在被删除。数据源读取时若核心网络正处于中间状态state会如实返回该状态值可作为条件判断依据。edges属性说明edges是一个对象列表每个元素代表核心网络的一个边缘edge即一个部署了核心网络入口的 AWS 区域。每个边缘导出以下属性属性类型说明asnnumber核心网络边缘的自治系统号ASN。edge_locationstring边缘所在的 AWS 区域。inside_cidr_blockslist of string核心网络边缘使用的内部 IP 地址段。在源码中edgeModelcore_network_data_source.go对应此结构而资源的读取逻辑flattenCoreNetworkEdgescore_network.go会把 AWS SDK 返回的awstypes.CoreNetworkEdge逐一转换为 Terraform 可序列化的 map确保asn、edge_location、inside_cidr_blocks三个字段完整映射。network_function_groups属性说明network_function_groups是与核心网络关联的网络功能组列表该字段在部分区域/场景下为空列表。每个元素导出属性类型说明edge_locationslist of string网络功能组的核心网络边缘位置。namestring网络功能组的名称。segmentslist of object与该网络功能组关联的网段详见 network_function_groups.segments 属性说明。network_function_groups.segments属性说明嵌套的segments对象列表进一步导出网段在网络功能组中的作用属性类型说明send_tolist of string与send-to动作关联的网段列表。send_vialist of string与send-via动作关联的网段列表。对应源码中的networkFunctionGroupModel与networkFunctionGroupSegmentsModelcore_network_data_source.go。在测试配置中未启用网络功能组时该列表长度为 0network_function_groups.#为0。segments属性说明segments是核心网络内的网段segment列表。每个元素导出属性类型说明edge_locationslist of string网段所在边缘的 AWS 区域。namestring核心网络网段的名称。shared_segmentslist of string核心网络的共享网段其他可共享该网段的网段名列表。对应源码中的segmentModelcore_network_data_source.go与资源侧的flattenCoreNetworkSegmentscore_network.go。网段是核心网络策略的核心概念——Attachment 通过segment归属到指定网段网段间可通过shared_segments建立共享关系。底层实现原理数据源读取链路数据源的读取逻辑非常直观全部集中在Read方法中core_network_data_source.go其调用链如下获取 AWS 客户端通过d.Meta().NetworkManagerClient(ctx)取得 Network Manager 服务的 AWS SDK v2 客户端解析配置从请求中读取core_network_id调用查找函数执行findCoreNetworkByID(ctx, conn, data.CoreNetworkID.ValueString())扁平化结果使用fwflex.Flatten(ctx, out, data, fwflex.WithFieldNamePrefix(CoreNetwork))将 AWS SDK 返回的awstypes.CoreNetwork结构体按CoreNetwork字段名前缀自动映射为数据源模型写入状态resp.State.Set(ctx, data)将结果写入 Terraform 状态。其中findCoreNetworkByIDcore_network.go内部调用GetCoreNetworkAPI并做了两层容错处理当 AWS 返回ResourceNotFoundException时包装为retry.NotFoundError便于上层做未找到语义判断当返回的output或output.CoreNetwork为空指针时返回tfresource.NewEmptyResultError()避免空指针解引用。状态机与等待器虽然数据源本身是只读的但理解核心网络的状态机有助于解读state属性。在 core_network.go 中Provider 通过statusCoreNetworkState轮询核心网络状态并使用retry.StateChangeConf实现三种等待waitCoreNetworkCreated等待CREATING/PENDING过渡到AVAILABLEwaitCoreNetworkUpdated等待UPDATING回到AVAILABLEwaitCoreNetworkDeleted等待DELETING状态消失。资源侧的创建、更新、删除默认超时均为 30 分钟见 core_network.go这是因为核心网络及其策略的生效需要较长时间。数据源读取到的state即来自这一状态体系。测试用例验证仓库为数据源提供了完整的验收测试acceptance test见 core_network_data_source_test.go。测试TestAccNetworkManagerCoreNetworkDataSource_basic验证了数据源的arn、description、global_network_id、state、tags与对应资源属性完全一致TestCheckResourceAttrPaircreated_at非空ARN 匹配core-network/.的正则模式双区域配置下edges.#为 2且各边缘的edge_location、asn与策略文档中声明的值一一对应segments.#为 2两个网段的name、edge_locations与策略声明一致未启用网络功能组时network_function_groups.#为 0。这套测试同时展示了数据源与aws_networkmanager_core_network_policy_document、aws_networkmanager_core_network、aws_networkmanager_core_network_policy_attachment的协作方式可作为实际编写配置的参考模板。小结aws_networkmanager_core_network数据源提供了一条按 ID 读取核心网络完整信息的标准路径只需一个core_network_id参数即可获得 ARN、创建时间、所属全球网络、边缘含 ASN 与内部 CIDR、网段含共享关系、网络功能组及标签等全部关键信息。其实现基于 Plugin Framework通过GetCoreNetworkAPI 与fwflex.Flatten自动映射完成数据装载配合资源侧的findCoreNetworkByID查找器与三套状态等待器构成了完整、健壮的核心网络查询能力。在编写依赖核心网络拓扑的 Terraform 配置时优先使用该数据源引用既有网络可以显著提升配置的可维护性与幂等性。进一步阅读数据源文档、核心网络资源文档、数据源实现源码、核心网络资源实现源码。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考