资讯动态

terraform-provider-aws 数据源 `aws_ec2_local_gateways` 完全指南:批量查询 Outposts Local Gateway 标识符

发布时间:2026/9/18 23:47:18 来源:尧图企业网站定制
terraform-provider-aws 数据源aws_ec2_local_gateways完全指南批量查询 Outposts Local Gateway 标识符【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本指南以 AWS Provider 官方文档 ec2_local_gateways.html.markdown 为主体系统讲解多值数据源aws_ec2_local_gateways的用途、过滤参数、输出属性与超时配置并结合仓库中的实现源码与测试用例剖析其底层调用链DescribeLocalGatewaysAPI、分页器与过滤器转换帮助读者在 Terraform 配置中准确、高效地批量检索 EC2 Local Gateway 标识符并与下游资源联动。数据源定位一个查询多个 Local Gateway 的批量入口aws_ec2_local_gateways是 AWS Provider 中归属于Outposts (EC2)子类别的多值数据源plural data source用于一次性获取多个 EC2 Local Gateway 的信息尤其是它们的标识符ID。与单值数据源aws_ec2_local_gateway见 outposts_local_gateway_data_source.go不同本数据源返回的是标识符集合set适合在存在多个 Local Gateway 的环境中例如多个 Outposts 部署批量枚举资源 ID。从仓库目录结构看该实现位于internal/service/ec2下相关文件统一以outposts_前缀命名如 outposts_local_gateways_data_source.go并且其接受性测试通过acctest.PreCheckOutpostsOutposts校验 Outposts 环境就绪这些均印证了该数据源是围绕 AWS Outposts 场景设计的 EC2 扩展能力。示例用法按资源标签批量获取 Local Gateway ID官方文档给出的核心用法是按标签过滤将service production的所有 Local Gateway 标识符暴露为输出data aws_ec2_local_gateways foo { tags { service production } } output foo { value data.aws_ec2_local_gateways.foo.ids }执行terraform plan/terraform apply后data.aws_ec2_local_gateways.foo.ids即为匹配标签的 Local Gateway ID 集合。该集合的语义是标签对必须完全匹配each pair of which must exactly match a pair on the desired local gateways即只有同时携带serviceproduction标签的 Local Gateway 才会被选中。标签过滤在底层会被转换为 EC2 API 的tag:key过滤器读取逻辑中调用newTagFilterList(svcTags(...))将 Terraform 标签映射拼接进DescribeLocalGatewaysInput.Filters见 outposts_local_gateways_data_source.go。参数说明Argument Reference该数据源支持以下参数参数是否必填说明region可选资源将被管理的区域默认使用 Provider 配置中设置的区域tags可选标签映射必须与目标 Local Gateway 上的标签精确匹配filter可选自定义过滤块用于表达比标签更复杂的过滤条件其中filter为可重复的子块每个子块包含两个必填字段name必填要过滤的字段名字段定义与底层 AWS APIDescribeLocalGateways的过滤约定一致values必填该字段可接受的取值集合只要 Local Gateway 匹配其中任意一个值即被选中OR 语义。一个使用自定义过滤块的配置示例data aws_ec2_local_gateways selected { filter { name state values [available] } filter { name tag:Name values [prod-lgw-*] } }过滤器块在源码中的形态在 filters.go 中customFiltersSchema()定义的 filter 块为 SDK v2 的schema.Set类型name为必填字符串values为必填字符串集合TypeSet元素为TypeString。读取时由newCustomFilterList将配置中的 Set 逐个转换为awstypes.Filter{Name, Values}列表见 filters.go随后追加到DescribeLocalGatewaysInput.Filters中。tag:前缀的过滤字段同样经由该通道传入 API实现基于任意标签键的筛选。属性说明Attribute Reference除上述参数外数据源还会导出以下只读属性idAWS Region字符串。实现中通过d.SetId(meta.(*conns.AWSClient).Region(ctx))将数据源的 ID 固定为当前客户端所在区域见 outposts_local_gateways_data_source.goids所有匹配 Local Gateway 标识符的集合TypeList元素为字符串。实现使用tfslices.ApplyToAll(output, ...)从 API 响应中提取每个LocalGateway.LocalGatewayId并组装为列表见 outposts_local_gateways_data_source.go。读取超时Timeouts该数据源支持read操作超时配置默认值为20mdata aws_ec2_local_gateways foo { timeouts { read 10m } }源码中通过Timeouts: schema.ResourceTimeout{Read: schema.DefaultTimeout(20 * time.Minute)}定义见 outposts_local_gateways_data_source.go并使用ReadWithoutTimeout接入读取逻辑。底层原理读取调用链与分页机制数据源的读取流程可概括为标签 → 过滤器转换 → DescribeLocalGateways API → 分页聚合 → ID 提取其完整链路如下从 Provider 元数据中获取 EC2 客户端conn : meta.(*conns.AWSClient).EC2Client(ctx)构建ec2.DescribeLocalGatewaysInput将tags与filter分别转换为 API 过滤器并合并进Filters若最终没有过滤器则将Filters置为nil以查询全部 Local Gateway见 outposts_local_gateways_data_source.go调用findLocalGateways执行 API 请求设置id为区域、ids为 Local Gateway ID 列表。findLocalGateways位于 find.go其关键实现是使用ec2.NewDescribeLocalGatewaysPaginator对 API 响应分页遍历pages : ec2.NewDescribeLocalGatewaysPaginator(conn, input) for pages.HasMorePages() { page, err : pages.NextPage(ctx) // ... output append(output, page.LocalGateways...) }这意味着即使 AWS 返回的 Local Gateway 数量超过单页上限默认MaxResults限制数据源也能自动聚合所有分页结果保证ids的完整性。同目录下的findLocalGateway单值版本则基于同一分页函数并借助tfresource.AssertSingleValueResult断言结果唯一供单值数据源复用。测试验证如何确认行为仓库为该数据源提供了接受性测试 outposts_local_gateways_data_source_test.go。核心用例TestAccEC2OutpostsLocalGatewaysDataSource_basic使用最简配置data aws_ec2_local_gateways test {}不做任何过滤并断言ids.#大于 0验证了无过滤时返回区域内全部 Local Gateway这一基线行为Check: resource.ComposeTestCheckFunc( acctest.CheckResourceAttrGreaterThanValue(dataSourceName, ids.#, 0), ),测试通过acctest.PreCheckOutpostsOutposts前置校验确保运行环境具备 Outposts 资源并配合acctest.ErrorCheck(t, names.EC2ServiceID)校验 EC2 服务错误。这为后续自定义tags/filter的过滤行为提供了回归保障。与周边资源联动在 Outposts 场景中aws_ec2_local_gateways通常与同一子模块下的其他 Local Gateway 资源配合使用例如outposts_local_gateway_route.go基于 Local Gateway 的路由管理outposts_local_gateway_route_table.goLocal Gateway 路由表outposts_local_gateway_route_table_vpc_association.go路由表与 VPC 的关联outposts_local_gateway_virtual_interface_group_data_source.go查询虚拟接口组。典型用法是将data.aws_ec2_local_gateways.foo.ids作为for_each的键集合为每个 Local Gateway 动态创建上述资源实现批量编排。小结aws_ec2_local_gateways是多值数据源输出匹配 Local Gateway 的ids集合与区域id支持tags精确匹配、filternamevalues多值 OR 语义与region参数底层通过DescribeLocalGatewaysAPI 的分页器聚合全部结果超时默认20m测试用例确认了无过滤时返回全部、有过滤时精确匹配的行为可作为配置正确性的参照。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价