尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

terraform-provider-aws 数据源 `aws_ec2_local_gateway_route_table` 完全指南:查询与解析 Outposts 本地网关路由表

terraform-provider-aws 数据源 `aws_ec2_local_gateway_route_table` 完全指南:查询与解析 Outposts 本地网关路由表 terraform-provider-aws 数据源aws_ec2_local_gateway_route_table完全指南查询与解析 Outposts 本地网关路由表【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇文章以 terraform-provider-aws 官方文档 website/docs/d/ec2_local_gateway_route_table.html.markdown 为骨架系统讲解aws_ec2_local_gateway_route_table数据源的用途、全部入参含filter子块、返回属性、超时配置与底层实现原理。你将掌握如何通过路由表 ID、Local Gateway ID、Outpost ARN、state、tags 或任意 API 字段精确查询一条 EC2 Local Gateway Route Table并理解必须恰好匹配一条记录的约束机制从而安全地在模块化 Terraform 配置中动态引用该资源。数据源是什么解决什么问题EC2 Local Gateway Route Table本地网关路由表是 AWS Outposts 场景下连接本地网关Local Gatewaylgw-*与 VPC 流量的核心路由对象。在 Terraform 中aws_ec2_local_gateway_route_table数据源用于读取而非管理一条已存在的本地网关路由表并导出其 ID、关联的 Local Gateway、Outpost ARN、状态与标签等属性。官方文档明确指出其典型价值场景当模块以local_gateway_route_table_id作为输入变量接收时模块内部往往需要反查该路由表关联的Outpost或Local Gateway例如用于创建 aws_ec2_local_gateway_route_table_vpc_association 之类的关联资源。此时无需要求调用方同时传入多个 ID只需传入一个路由表 ID再由数据源在配置中自动解析出全部关联信息。与之配套的同类数据源还包括aws_ec2_local_gateway_route_tables复数形式返回当前区域所有匹配路由表 ID 列表见 website/docs/d/ec2_local_gateway_route_tables.html.markdown以及aws_ec2_local_gateways返回 Local Gateway 列表见 website/docs/d/ec2_local_gateways.html.markdown三者常组合使用实现先枚举、后定位的查询模式。基本用法按 ID 精确获取官方文档给出的最简示例传入一个已知的local_gateway_route_table_id返回该路由表的详细信息。variable aws_ec2_local_gateway_route_table {} data aws_ec2_local_gateway_route_table selected { local_gateway_route_table_id var.aws_ec2_local_gateway_route_table }读取成功后即可通过data.aws_ec2_local_gateway_route_table.selected.local_gateway_id、data.aws_ec2_local_gateway_route_table.selected.outpost_arn、data.aws_ec2_local_gateway_route_table.selected.state等属性在其他资源中引用。Argument Reference全部入参详解本数据源支持以下参数除region与filter外其余均为Optional Computed属性既可作过滤条件输入也可在查询成功后由数据源回填导出参数类型必填说明regionstring可选管理该资源的区域默认使用 provider 配置中设置的 Regionlocal_gateway_route_table_idstring可选目标本地网关路由表的 ID形如lgw-rtb-*local_gateway_idstring可选与目标路由表关联的 Local Gateway 的 ID形如lgw-*outpost_arnstring可选与目标路由表关联的 Outpost 的 ARN形如arn:aws:outposts:...:outpost/op-*statestring可选路由表的状态用于按状态过滤tagsmap(string)可选标签映射每个键值对都必须精确匹配目标路由表上的标签filter子块可选更复杂的过滤条件见下文官方文档明确了一条核心查询约束所有入参共同充当过滤器用于在当前区域中查询可用的本地网关路由表给定的过滤条件必须恰好匹配一条Local Gateway Route Table其数据才会被导出为属性。若匹配 0 条或多条查询都会失败。这一约束在源码中有直接体现。数据源 internal/service/ec2/outposts_local_gateway_route_table_data_source.go 的读取函数将入参组装为DescribeLocalGatewayRouteTablesInput并最终调用 internal/service/ec2/find.go 中的findLocalGatewayRouteTablefunc findLocalGatewayRouteTable(ctx context.Context, conn *ec2.Client, input *ec2.DescribeLocalGatewayRouteTablesInput) (*awstypes.LocalGatewayRouteTable, error) { output, err : findLocalGatewayRouteTables(ctx, conn, input) if err ! nil { return nil, err } return tfresource.AssertSingleValueResult(output) }tfresource.AssertSingleValueResult即单一结果断言只有当 API 恰好返回 1 条记录时才成功否则报错——这就是必须精确匹配一条约束的底层实现。当查询失败时数据源会通过tfresource.SingularDataSourceFindError包装错误信息返回见 outposts_local_gateway_route_table_data_source.go便于定位是未找到还是匹配到多条。filter子块当普通参数不足以表达查询条件时可使用一个或多个filter子块其参数为name-Required要过滤的字段名字段名遵循底层 AWS EC2DescribeLocalGatewayRouteTablesAPI 定义的过滤键例如outpost-arn、local-gateway-id、state、tag:key等。values-Required该字段可接受的取值集合只要任一取值匹配该路由表即被选中OR 语义。从源码看filter子块在读取时通过newCustomFilterList被追加到请求的Filters中见 outposts_local_gateway_route_table_data_source.go与普通参数转换出的过滤器共同作用于 API 请求。结合仓库中的验收测试 outposts_local_gateway_route_table_data_source_test.gofilter的典型用法如下先用aws_outposts_outposts数据源枚举出所有 Outpost ARN再按outpost-arn字段过滤data aws_outposts_outposts test {} data aws_ec2_local_gateway_route_table test { filter { name outpost-arn values [tolist(data.aws_outposts_outposts.test.arns)[0]] } }Attribute Reference导出的属性官方文档指出本数据源不导出额外属性This data source exports no additional attributes。即所有导出属性都来自前述入参本身——由于local_gateway_route_table_id、local_gateway_id、outpost_arn、state、tags均为 Computed 属性查询成功后会由数据源自动回填实际值可直接在表达式中引用local_gateway_route_table_id路由表 ID形如lgw-rtb-*同时被用作数据源的 IDd.SetId(...)local_gateway_id关联 Local Gateway 的 ID形如lgw-*outpost_arn关联 Outpost 的 ARN形如arn:aws:outposts:region:account:outpost/op-*state路由表当前状态tags路由表上的全部标签。这些属性在读取函数末尾逐项写入见 outposts_local_gateway_route_table_data_source.go其中标签通过setTagsOut输出ID 直接设置为LocalGatewayRouteTableId。关于state的可能取值可从同目录下的管理资源源码推断在 outposts_local_gateway_route_table.go 的等待逻辑中状态机以pending → available表示创建完成以available/deleting → deleted表示删除完成findLocalGatewayRouteTableByID更明确地将deleted视为不存在outposts_local_gateway_route_table.go。因此可以推断state的常见取值包括pending、available、deleting、deleted。验收测试也以state available作为就绪断言见 outposts_local_gateway_route_table_data_source_test.go。Timeouts读超时配置本数据源支持read超时配置默认值为20 分钟read-默认20m对应源码中的Timeouts.Read: schema.DefaultTimeout(20 * time.Minute)见 outposts_local_gateway_route_table_data_source.go。由于单次DescribeLocalGatewayRouteTables调用耗时极短20 分钟的默认值通常已绰绰有余如需显式调整可在数据源块内配置data aws_ec2_local_gateway_route_table selected { local_gateway_route_table_id var.aws_ec2_local_gateway_route_table timeouts { read 10m } }底层原理从配置到 AWS API 的完整调用链结合 outposts_local_gateway_route_table_data_source.go可以完整还原数据源的查询链路组装请求优先使用local_gateway_route_table_id填充LocalGatewayRouteTableIds数组精确 ID 查询若未指定则依赖过滤器。组装过滤器通过newAttributeFilterList将local_gateway_id、outpost_arn、state转换为 API 过滤键local-gateway-id、outpost-arn、state通过newTagFilterList将tags转换为标签过滤条件再通过newCustomFilterList追加filter子块。若最终过滤器列表为空则置为nilEC2 API 不接受空过滤器列表。发起调用调用findLocalGatewayRouteTable执行DescribeLocalGatewayRouteTables底层的findLocalGatewayRouteTables使用NewDescribeLocalGatewayRouteTablesPaginator自动分页拉取全部匹配结果见 internal/service/ec2/find.go。单一结果断言tfresource.AssertSingleValueResult校验结果数量必须为 1否则报错。写入状态将返回对象中的LocalGatewayId、LocalGatewayRouteTableId、OutpostArn、State、Tags逐项写入 Terraform 状态。组合查询模式三种推荐的用法仓库验收测试 outposts_local_gateway_route_table_data_source_test.go 提供了三种动态发现目标路由表的标准写法可直接迁移到实际配置中方式一按 Local Gateway ID 反查路由表先枚举 Local Gateway再取其第一条的路由表data aws_ec2_local_gateways test {} data aws_ec2_local_gateway_route_table test { local_gateway_id tolist(data.aws_ec2_local_gateways.test.ids)[0] }方式二按 Outpost ARN 定位路由表先枚举 Outposts再取其第一条 ARNdata aws_outposts_outposts test {} data aws_ec2_local_gateway_route_table test { outpost_arn tolist(data.aws_outposts_outposts.test.arns)[0] }方式三先列 ID 再精确查询先用复数数据源拿到全部 ID 列表再逐个解析data aws_ec2_local_gateway_route_tables test {} data aws_ec2_local_gateway_route_table test { local_gateway_route_table_id tolist(data.aws_ec2_local_gateway_route_tables.test.ids)[0] }与管理资源的区别与配合注意区分数据源与同名管理资源aws_ec2_local_gateway_route_table资源见 website/docs/r/ec2_local_gateway_route_table.html.markdown负责创建/删除路由表必填参数为local_gateway_id与modedirect-vpc-routing/coip并额外导出arn、owner_id、tags_all等属性。两者配合的典型链路是用资源或既有基础设施创建路由表 → 用数据源在模块内按 ID 动态解析其关联信息 → 传递给aws_ec2_local_gateway_route_table_vpc_association等下游关联资源从而避免在多个资源之间手工维护重复的 ID/ARN 参数。使用注意事项唯一性约束过滤条件必须精确命中一条路由表0 条与多条都会导致读取失败。因此按local_gateway_id或outpost_arn查询前需确认该 Local Gateway / Outpost 只关联一个路由表否则应改用filter补充条件如state、tag:key。区域范围查询仅作用于当前区域provider 配置的区域跨区域路由表需在数据源上显式指定region参数。状态过滤已被删除的路由表在底层被视为不存在查询会直接报未找到错误。标签匹配tags的每个键值对都必须与目标路由表完全一致多标签为 AND 语义需要宽松匹配时请使用filter子块配合tag:key过滤键。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表