资讯动态

使用 Terraform AWS Provider 的 `aws_networkmanager_connection` 数据源查询 Network Manager 连接详情

发布时间:2026/9/19 20:31:39 来源:尧图企业网站定制
使用 Terraform AWS Provider 的aws_networkmanager_connection数据源查询 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_connection数据源Data Source通过global_network_id与connection_id两个必填参数即可读取 AWS Network Manager 全局网络中一条已存在的 Connection设备间连接的全部属性包括 ARN、两端设备与链路 ID、描述与标签。读完本文你将掌握该数据源的完整配置语法、参数与导出属性清单并通过仓库源码理解其底层 API 调用、标签处理与状态等待机制能够在基础设施即代码IaC中安全地引用既有连接而无需在状态中重复管理。数据源定位连接信息从哪来在 AWS Network Manager 的体系中Connection描述的是同一个全球网络Global Network内两台设备Device之间的连接关系可选的link_id/connected_link_id进一步将连接绑定到具体的链路Link。aws_networkmanager_connection数据源用于查询已存在的连接信息它与管理型资源 aws_networkmanager_connection 的区别在于资源Resource负责创建、更新、删除连接会写入 Terraform 状态数据源Data Source只读地拉取某个连接的当前属性供其他资源配置引用例如将查询到的connected_device_id传给监控、计费或自动化脚本相关配置。文档对该数据源的定位是 Provides details about an existing Network Manager connection即提供关于已有 Network Manager 连接的详细信息。基本用法在 connection_data_source.go 中该数据源注册为SDKDataSource(aws_networkmanager_connection, nameConnection)schema 中global_network_id与connection_id均为Required必填其余属性全部为Computed只读导出。最小可用配置如下data aws_networkmanager_connection example { global_network_id var.global_network_id connection_id var.connection_id }其中var.global_network_id与var.connection_id可由你自行通过变量传入也可以直接引用仓库内其他 Terraform 资源的输出例如data aws_networkmanager_connection example { global_network_id aws_networkmanager_global_network.example.id connection_id aws_networkmanager_connection.example.id }connection_id即连接在 AWS 侧的 ID例如connection-07f6fd08867abc123格式它同时会被用作数据源的内部 ID源码中d.SetId(connectionID)。参数参考Argument Reference该数据源支持以下参数参数必填说明global_network_id是Required待查询连接所属 Global Network全球网络的 IDconnection_id是Required待查询的具体连接的 ID从源码看这两个参数构成读取连接的双键two-part keyfindConnectionByTwoPartKey 会构造GetConnectionsInput{ConnectionIds: []string{connectionID}, GlobalNetworkId: aws.String(globalNetworkID)}调用 AWS 的GetConnectionsAPI并在返回结果中再次校验GlobalNetworkId与ConnectionId与请求一致作为最终一致性eventual consistency兜底校验不通过时返回retry.NotFoundError。这意味着同一 connection_id 在不同 global network 下不会混淆查询结果与查询条件严格对应。导出属性参考Attribute Reference除了上述两个参数本身数据源还会导出以下只读属性属性说明arn连接的 ARNAmazon 资源名称connected_device_id连接中第二台设备的 IDconnected_link_id第二台设备所关联链路的 IDdescription连接的描述信息device_id连接中第一台设备的 IDlink_id第一台设备所关联链路的 IDtags连接的键值标签Key-value tags这些属性在 dataSourceConnectionRead 中逐项从 AWS SDK 返回的awstypes.Connection结构体映射到 Terraform stated.Set(names.AttrARN, connection.ConnectionArn) d.Set(connected_device_id, connection.ConnectedDeviceId) d.Set(connected_link_id, connection.ConnectedLinkId) d.Set(names.AttrConnectionID, connection.ConnectionId) d.Set(names.AttrDescription, connection.Description) d.Set(device_id, connection.DeviceId) d.Set(global_network_id, connection.GlobalNetworkId) d.Set(link_id, connection.LinkId)标签的读取与过滤规则tags属性走的是 provider 统一的标签读取链路源码中d.Set(names.AttrTags, keyValueTags(ctx, connection.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map())其含义是.IgnoreAWS()过滤掉 AWS 自动添加的系统标签如aws:前缀.IgnoreConfig(ignoreTagsConfig)遵循 provider 级ignore_tags配置块按用户的忽略规则剔除标签最终以 Go map 形式写入tags。因此你在数据源中看到的tags是经过 provider 全局过滤规则清洗后的结果这一点与资源侧的tags_all语义不同引用时需注意。与相关资源/数据源的配套使用用资源创建、用数据源读取典型的完整链路是先通过资源创建 Global Network、Device 与 Connection再用数据源读取属性做校验或供下游使用resource aws_networkmanager_global_network example { description example } resource aws_networkmanager_device example1 { global_network_id aws_networkmanager_global_network.example.id } resource aws_networkmanager_device example2 { global_network_id aws_networkmanager_global_network.example.id } resource aws_networkmanager_connection example { global_network_id aws_networkmanager_global_network.example.id device_id aws_networkmanager_device.example1.id connected_device_id aws_networkmanager_device.example2.id } data aws_networkmanager_connection example { global_network_id aws_networkmanager_global_network.example.id connection_id aws_networkmanager_connection.example.id } output connection_arn { value data.aws_networkmanager_connection.example.arn }资源侧补充说明详见 资源文档device_id、connected_device_id、global_network_id在资源中均为必填且ForceNew修改即重建connected_link_id、description、link_id为可选description在源码中有validation.StringLenBetween(0, 256)的长度校验见 connection.go资源还提供create/update/delete默认 10 分钟的 Timeout以及基于连接 ARN 的导入能力。批量查询aws_networkmanager_connections如果你需要按device_id或标签批量获取连接 ID 列表可配合使用列表数据源 aws_networkmanager_connections它以global_network_id为必填参数支持可选的device_id与tags过滤导出ids列表随后再对每个 ID 用本文的aws_networkmanager_connection数据源逐条查询详情即可拼出列表 明细的完整查询方案。底层原理数据源的一次读取是如何完成的结合源码可梳理出数据源完整的执行链路初始化客户端dataSourceConnectionRead通过meta.(*conns.AWSClient).NetworkManagerClient(ctx)获取 Network Manager 服务的 AWS SDK v2 客户端构造查询条件读取global_network_id与connection_id调用findConnectionByTwoPartKey分页拉取findConnections 使用networkmanager.NewGetConnectionsPaginator对GetConnections结果分页聚合若全局网络不存在会将ResourceNotFoundException包装为retry.NotFoundError唯一性断言findConnection 通过tfresource.AssertSingleValueResult断言必须恰好命中一条连接多于一条则报错一致性校验校验返回的GlobalNetworkId与ConnectionId与请求参数一致写入 state将各字段与清洗后的tags写入 Terraform state数据源 ID 设为connection_id。这一分页聚合 单值断言 最终一致性校验的模式在仓库中属于通用惯例与资源侧resourceConnectionRead复用的是同一套查找函数保证了数据源与资源读到的是同一份事实。测试验证数据源与资源的属性一致性仓库为数据源编写了接受度测试Acceptance Test见 connection_data_source_test.go。TestAccNetworkManagerConnectionDataSource_basic的核心思路是先用testAccConnectionConfig_descriptionAndLinks创建带description、link_id、tags的完整资源场景再叠加data aws_networkmanager_connection test数据源配置通过resource.TestCheckResourceAttrPair逐一断言数据源每个导出属性与资源属性成对相等包括arn、connected_device_id、connected_link_id、connection_id、description、global_network_id、link_id以及tags.%。该测试同时验证了数据源在资源带链路与描述场景下的正确性也与文档中导出属性 参数 上述只读属性的说明完全对应。若你想在本地复现可按 running-and-writing-acceptance-tests.md 的指引设置 AWS 凭据与TF_ACC1后运行注意测试中PreCheck会先校验账号与区域可用性。常见疑问与注意事项数据源查询不到连接会怎样源码中findConnectionByTwoPartKey在结果为空或一致性校验失败时返回NotFoundErrordataSourceConnectionRead会直接报错 reading Network Manager Connection不会静默返回空数据。连接被删除后数据源会报错吗会。数据源没有资源那样的从 state 中移除逻辑资源在Read时对非新建资源的NotFound会清空 ID见 connection.go数据源每次 plan/apply 都会实时调用 AWS 查询因此被删连接会导致数据源引用失败这恰恰是详情实时可查这一设计意图。跨区域可用性Network Manager 是全球服务global_network_id标识的是全局网络实体连接数据不依赖具体区域端点实际调用区域由 provider 配置决定。标签差异数据源的tags是清洗后的结果与资源导出的tags_all含 provider 级default_tags继承语义不同做相等性比较时请选择正确的属性。小结aws_networkmanager_connection数据源以global_network_idconnection_id双键精确定位一条 Network Manager 连接一次性导出 ARN、两端设备/链路 ID、描述与标签等全部元数据。其实现位于 connection_data_source.go底层复用资源同款的GetConnections分页查询与最终一致性校验逻辑并有 接受度测试 保证属性与资源完全对齐。无论是将既有连接信息注入其他资源还是做状态审计与自动化校验它都是连接aws_networkmanager_connections批量列表与资源生命周期管理之间的关键一环。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价