ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

terraform-provider-aws 数据源 aws_ec2_local_gateway 实战:查询与过滤 Local Gateway 详解

terraform-provider-aws 数据源 aws_ec2_local_gateway 实战:查询与过滤 Local Gateway 详解 terraform-provider-aws 数据源 aws_ec2_local_gateway 实战查询与过滤 Local Gateway 详解【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇指南完整讲解 terraform-provider-aws 中aws_ec2_local_gateway数据源的配置与使用它用于查询当前区域内的单个 EC2 Local GatewayOutposts 本地网关支持按id、state、tags与自定义filter精确筛选并导出outpost_arn、owner_id等属性。读者学完后可以快速定位指定 Local Gateway、将其 ID 与 ARN 注入其他资源如aws_ec2_local_gateway_route、aws_ec2_local_gateway_route_table_vpc_association并理解数据源底层的 EC2 API 调用与唯一性校验机制。数据源简介与适用场景aws_ec2_local_gateway是 AWS Provider 中 EC2 服务internal/service/ec2提供的只读数据源用于获取某一个Local Gateway 的详细信息。Local Gateway 是 AWS Outposts 部署中的本地网络组件它把 VPC 子网流量转发到本地 IDC 网络是 Outposts 网络架构的关键一环。该数据源的核心用途包括以变量或上游资源输出作为id查询对应 Local Gateway 的 ARN、所属账号与状态在构建本地网关路由表、虚拟接口组等关联资源时作为依赖解析与参数注入的桥梁通过标签或自定义过滤器从多个 Local Gateway 中精确挑选目标实例。数据源的定义位于 internal/service/ec2/outposts_local_gateway_data_source.go其官方文档即 website/docs/d/ec2_local_gateway.html.markdown。基本用法按 ID 查询文档给出的最典型用法是接收一个 Local Gateway ID 变量并查询其详情variable local_gateway_id {} data aws_ec2_local_gateway selected { id var.local_gateway_id }配置完成后可以通过data.aws_ec2_local_gateway.selected.id、data.aws_ec2_local_gateway.selected.outpost_arn等表达式在输出或其他资源中引用结果output outpost_arn { value data.aws_ec2_local_gateway.selected.outpost_arn }如果账号内只有一个 Local Gateway也可以直接使用配套的aws_ec2_local_gateways数据源先拿到全部 ID再取第一个进行细化查询data aws_ec2_local_gateways all {} data aws_ec2_local_gateway selected { id tolist(data.aws_ec2_local_gateways.all.ids)[0] }参数详解Argument Referenceaws_ec2_local_gateway数据源支持的查询参数如下所有参数均为可选它们共同构成筛选条件最终查询结果必须精确匹配唯一的 Local Gateway参数类型说明regionOptional查询区域默认使用 provider 配置 中设置的区域该参数用于将数据源指向特定区域执行查询filterOptional自定义过滤子块可表达标量参数与标签无法覆盖的复杂组合条件idOptional目标 Local Gateway 的唯一标识形如lgw-xxxx用于精确定位stateOptional目标 Local Gateway 的当前状态可选值为pending或availabletagsOptional标签映射必须与目标 Local Gateway 上的标签键值对完全一致才能匹配这些参数在数据源读取阶段会被转换为 EC2 API 的Filters输入。从源码 outposts_local_gateway_data_source.go 可以看到完整的构造逻辑id直接映射为 API 请求中的LocalGatewayIdsstate通过newAttributeFilterList转为精确匹配过滤器tags通过newTagFilterList转换为tag:key形式的过滤器filter子块通过newCustomFilterList逐一展开当所有过滤条件都为空时代码会显式将Filters置为nil注释说明 EC2 API 不接受空的 filters 列表。filter 子块filter子块用于表达更复杂的组合查询每个子块包含两个必填参数name- (Required) 要过滤的字段名字段名称由底层 EC2 API 定义对应 DescribeLocalGateways 的过滤器集合如local-gateway-id、state、tag-key、tag:key等values- (Required) 该字段可接受的值的集合只要命中集合中任意一个值即视为匹配。data aws_ec2_local_gateway selected { filter { name state values [available] } }从实现层面看filter属性是一个schema.TypeSet见 internal/service/ec2/filters.go 中customFiltersSchema的定义每个元素包含必填的name与values读取时newCustomFilterList将每个子块转换为一个ec2.Filter{Name, Values}对象最终拼入DescribeLocalGatewaysInput.Filters。多条件组合与唯一性约束文档明确指出数据源的参数充当过滤器给定的筛选条件必须精确匹配唯一一个 Local Gateway其数据才会被导出。这意味着匹配 0 个对象时数据源报错找不到匹配多个对象时数据源同样报错。这一约束在源码中有硬性保证findLocalGateway在拿到分页结果后调用tfresource.AssertSingleValueResult(output)强制断言结果集大小为 1见 internal/service/ec2/find.go任何不唯一或为空的结果都会产生SingularDataSourceFindError见 outposts_local_gateway_data_source.go。因此在多 Local Gateway 的账号中应尽量使用id或足够有区分度的tags组合条件避免查询歧义。属性输出Attribute Reference除filter子块外所有参数属性id、state、tags等都会作为结果属性一并导出同时数据源会补齐配置中未包含的字段将选中 Local Gateway 的完整数据写入结果。额外导出的属性包括outpost_arn- 所属 Outpost 的 ARNowner_id- 拥有该 Local Gateway 的 AWS 账号标识state- Local Gateway 的状态。这些属性在读取函数中逐一写入outposts_local_gateway_data_source.goSetId使用 API 返回的LocalGatewayId随后写入OutpostArn、OwnerId、State标签则通过setTagsOut保存以便在整个 Provider 的标签处理流程中被引用。底层原理DescribeLocalGateways 调用链数据源读取的核心链路如下用户配置的id/state/tags/filter被组装为ec2.DescribeLocalGatewaysInputfindLocalGateways使用 AWS SDK for Go v2 的NewDescribeLocalGatewaysPaginator分页拉取全部 Local Gateway 列表internal/service/ec2/find.gofindLocalGateway调用AssertSingleValueResult校验唯一性命中结果后回填ResourceData并设置数据源 ID。其中标签与自定义过滤器的转换依赖 internal/service/ec2/filters.go 的三个核心函数newAttributeFilterList标量属性精确匹配、newTagFilterListtag:key匹配、newCustomFilterList自定义子块展开。从代码结构看这套 filter 工具函数被 EC2 下的多个数据源如ebs_volume、ec2_ami等复用属于 EC2 数据源的通用过滤基础设施。测试验证与配套数据源仓库为数据源提供了完整的单元/验收测试。TestAccEC2OutpostsLocalGatewayDataSource_basicoutposts_local_gateway_data_source_test.go验证了返回的id匹配^lgw-前缀outpost_arn匹配 Outposts ARN 格式outpost/op-.owner_id等于当前账号 IDstate为available。配套的aws_ec2_local_gateways数据源定义见 outposts_local_gateways_data_source.go文档见 website/docs/d/ec2_local_gateways.html.markdown用于一次性获取当前区域全部 Local Gateway 的ids列表可与本数据源组合实现先枚举、再精查的查询模式。超时配置Timeouts数据源支持read超时默认值为20m与源码中schema.DefaultTimeout(20 * time.Minute)的定义一致outposts_local_gateway_data_source.go。可按需调整data aws_ec2_local_gateway selected { id var.local_gateway_id timeouts { read 10m } }关联资源导航Local Gateway 在 Provider 中是一组完整的资源家族查询到 Local Gateway 后通常配合以下资源使用aws_ec2_local_gateway_route - 管理 Local Gateway 路由aws_ec2_local_gateway_route_table 及 对应数据源 - 管理/查询本地网关路由表aws_ec2_local_gateway_route_table_vpc_association - 将路由表关联到 VPCaws_ec2_local_gateway_virtual_interface_group 等数据源 - 查询虚拟接口组信息。在编排 Outposts 本地网络时典型的依赖链是用本数据源定位 Local Gateway → 关联路由表与 VPC → 下发本地网关路由实现本地数据中心与 VPC 之间的流量打通。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表