
深入解读 Terraform AWS Provider 的 aws_ec2_local_gateway_virtual_interface_group 数据源【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_ec2_local_gateway_virtual_interface_group是 Terraform AWS Provider 提供的 EC2 数据源用于按 ID、所属 Local Gateway、标签或过滤器精确查询 AWS Outposts 上的 Local Gateway Virtual Interface Group并获取其包含的 Virtual Interface 标识集合。读完本文你将掌握该数据源的完整参数语义、filter 过滤块用法、底层DescribeLocalGatewayVirtualInterfaceGroupsAPI 调用链与测试验证方式能够在 Outposts 网络编排场景中正确引用该数据源。背景Local Gateway Virtual Interface Group 在 Outposts 网络中的角色在 AWS Outposts 的本地网络组件中Local Gateway 用于在 Outpost 上提供本地路由与网络连接能力而Local Gateway Virtual Interface Group将一组 Virtual InterfaceVIF聚合成一个逻辑组供 Local Gateway 路由表等组件引用。该数据源对应 EC2 API 的DescribeLocalGatewayVirtualInterfaceGroups官方定位与详细介绍可参见 Outposts 用户指南中的网络组件与路由章节。在该 Provider 的源码中该数据源位于 EC2 服务的 Outposts 相关文件内文件路径为 internal/service/ec2/outposts_local_gateway_virtual_interface_group_data_source.go并在 service_package_gen.go 中完成注册源码注释标记为SDKDataSource(aws_ec2_local_gateway_virtual_interface_group)。基础用法示例官方文档给出的最小用法是先通过aws_ec2_local_gateway数据源取得 Local Gateway 的 ID再以该 ID 查询对应的 Virtual Interface Groupdata aws_ec2_local_gateway example { # 可在实际配置中通过 filter 指定要匹配的 Local Gateway } data aws_ec2_local_gateway_virtual_interface_group example { local_gateway_id data.aws_ec2_local_gateway.example.id }注意示例中直接引用了未定义的data.aws_ec2_local_gateway.example实际使用时需要先行定义该数据源可参考 ec2_local_gateway.html.markdown或者改用下方介绍的id、filter、tags三种查询路径之一。参数参考Argument Reference该数据源的参数全部为可选Optional按查询策略可分为以下四类参数类型必填性说明regionString可选该数据源执行查询的 AWS 区域默认使用 Provider 配置中设定的区域仅需跨区域查询时才需要显式指定idString可选EC2 Local Gateway Virtual Interface Group 的标识符形如lgw-vif-grp-xxxxxxxxlocal_gateway_idString可选所属 EC2 Local Gateway 的标识符形如lgw-xxxxxxxxfilterBlock可选一个或多个 name-value 过滤块支持的过滤器以 EC2 API 的DescribeLocalGatewayVirtualInterfaceGroups文档为准tagsMap可选资源的标签键值映射必须与目标 Local Gateway Route Table 上的标签键值完全一致才能命中以上四类参数在源码的 Schema 定义中均体现为Optional且大多为Optional Computed见 outposts_local_gateway_virtual_interface_group_data_source.go也就是说不提供该参数时数据源也能通过其他条件查询并回填该值。filter 过滤块filter配置块支持以下两个子参数name-必填过滤器名称例如local-gateway-id、tag-key、tag-value等以 EC2 API 官方支持的过滤器为准values-必填该过滤器的一个或多个取值列表。示例同时指定过滤块data aws_ec2_local_gateway_virtual_interface_group example { filter { name local-gateway-id values [lgw-0123456789abcdef0] } }属性参考Attribute Reference除上述参数在查询后可回填为属性外该数据源导出以下属性local_gateway_virtual_interface_ids- EC2 Local Gateway Virtual Interface 标识符的集合Set即该 Group 下聚合的所有 VIF ID 列表。结合源码可见local_gateway_virtual_interface_ids在 Schema 中被定义为TypeSet且仅 Computed源码第 47-51 行最终从 API 返回的LocalGatewayVirtualInterfaceIds字段整体写入。同时id会被设置为 API 返回的LocalGatewayVirtualInterfaceGroupIdlocal_gateway_id与tags也都会在读取后被回填。该数据源与单个 VIF 数据源aws_ec2_local_gateway_virtual_interface文档见 ec2_local_gateway_virtual_interface.html.markdown互为补充前者返回 Group 下的 VIF ID 集合后者可进一步查询单个 VIF 的 BGP ASN、VLAN、对端地址等细节二者常组合使用以完成 Outposts 网络参数的自动发现。Timeouts 超时配置该数据源支持read操作超时默认值为20m20 分钟data aws_ec2_local_gateway_virtual_interface_group example { local_gateway_id data.aws_ec2_local_gateway.example.id timeouts { read 30m } }该默认值在源码中通过schema.DefaultTimeout(20 * time.Minute)设置outposts_local_gateway_virtual_interface_group_data_source.go。源码实现查询调用链与单结果约束从源码可以还原该数据源的完整读取流程outposts_local_gateway_virtual_interface_group_data_source.go#L58-L101构造 API 请求若配置了id则将其填入DescribeLocalGatewayVirtualInterfaceGroupsInput的LocalGatewayVirtualInterfaceGroupIds字段合并三类过滤器local_gateway_id会被自动转换成local-gateway-id过滤器tags会被转换成标签过滤器二者再与用户显式声明的filter块合并空过滤器保护如果合并后过滤器列表为空源码会显式将其置为nil因为 EC2 API 不接受空过滤器列表源码第 82-85 行的注释明确说明了这一点分页查询与单结果断言实际查询由 find.go 中的findLocalGatewayVirtualInterfaceGroup完成——它先调用findLocalGatewayVirtualInterfaceGroups通过DescribeLocalGatewayVirtualInterfaceGroupsPaginator翻页拉取全部结果再交给tfresource.AssertSingleValueResult断言必须恰好命中一条记录写入状态命中后将LocalGatewayVirtualInterfaceGroupId设为资源 ID并回填local_gateway_id、local_gateway_virtual_interface_ids与标签。需要特别留意的是第 4 步的单结果约束这是一个单一singular数据源若查询条件过宽导致命中多条记录会通过tfresource.SingularDataSourceFindError返回错误。因此实际使用时id、local_gateway_id、filter、tags应组合出能唯一定位的条件。若业务上需要一次性枚举所有 Group应改用复数版数据源aws_ec2_local_gateway_virtual_interface_groups文档见 ec2_local_gateway_virtual_interface_groups.html.markdown其实现位于 outposts_local_gateway_virtual_interface_groups_data_source.go会返回所有 Group 的 ID 列表。接受性测试三种查询路径的验证仓库提供了完整的接受性测试来验证该数据源的三条查询路径见 outposts_local_gateway_virtual_interface_group_data_source_test.goTestAccEC2OutpostsLocalGatewayVirtualInterfaceGroupDataSource_filter通过filter块按local-gateway-id过滤断言id匹配^lgw-vif-grp-前缀、local_gateway_id匹配^lgw-前缀且local_gateway_virtual_interface_ids.#等于2TestAccEC2OutpostsLocalGatewayVirtualInterfaceGroupDataSource_localGatewayID直接使用local_gateway_id参数查询断言内容同上TestAccEC2OutpostsLocalGatewayVirtualInterfaceGroupDataSource_tags先用aws_ec2_tag资源给源 Group 打标签再通过tags参数反向命中该 Group并断言两个数据源的id与local_gateway_id一致。测试中的配置片段也展示了生产可用的动态用法——借助aws_ec2_local_gateways复数数据源先列出可用 Local Gateway再取第一个 ID 进行查询data aws_ec2_local_gateways test {} data aws_ec2_local_gateway_virtual_interface_group test { filter { name local-gateway-id values [tolist(data.aws_ec2_local_gateways.test.ids)[0]] } }这些测试统一通过acctest.PreCheckOutpostsOutposts前置检查意味着运行前提是当前测试账号/区域存在可用的 Outposts 环境。典型配套场景该数据源通常与其他 Outposts 网络资源配合使用形成完整的数据链路aws_ec2_local_gateway/aws_ec2_local_gateways定位 Local Gatewayaws_ec2_local_gateway_virtual_interface_group定位 Virtual Interface Groupaws_ec2_local_gateway_virtual_interface深入查询单个 VIF 的 BGP 与 VLAN 参数资源侧如 ec2_local_gateway_route_table_virtual_interface_group_association.html.markdown将该 Group 与 Local Gateway 路由表建立关联从而驱动 Outpost 上的本地路由。总结aws_ec2_local_gateway_virtual_interface_group数据源提供了id、local_gateway_id、filter、tags四条相互补充的查询路径并在源码层面通过过滤器合并、分页拉取与单结果断言保证了查询的严谨性。理解其单结果约束与local_gateway_virtual_interface_ids集合语义是正确编写 Outposts 本地网络自动化配置的关键。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考