ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Terraform AWS Provider 中 aws_api_gateway_authorizers 数据源:查询 REST API 下的所有 Authorizer

Terraform AWS Provider 中 aws_api_gateway_authorizers 数据源:查询 REST API 下的所有 Authorizer Terraform AWS Provider 中 aws_api_gateway_authorizers 数据源查询 REST API 下的所有 Authorizer【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇介绍 Terraform AWS Provider 提供的aws_api_gateway_authorizers数据源用于批量获取某个 API Gateway REST API 下已创建的全部 Authorizer授权器ID 列表。读完本文你将掌握该数据源的完整参数与导出属性、官方示例配置以及其底层实现机制——分页拉取Position 游标、状态 ID 设定方式并了解它与单资源数据源aws_api_gateway_authorizer及资源aws_api_gateway_authorizer之间的配合用法。一、数据源概述API Gateway REST API 的鉴权通常由 Authorizer 承担常见类型包括TOKEN、REQUESTLambda 鉴权和COGNITO_USER_POOLS。当你需要在一个 REST API 下批量创建 Authorizer、批量绑定到方法method或者在销毁/变更脚本中引用“该 API 下所有 Authorizer”时逐个硬编码 ID 显然不可维护。aws_api_gateway_authorizers数据源正是为此设计它只接受一个必填输入rest_api_id返回该 API 下全部 Authorizer 的标识符列表ids。对应文档为 aws_api_gateway_authorizers 数据源文档官方文档定义如下region- (Optional) 数据源所属的区域默认使用 Provider 配置中设置的 Region。rest_api_id- (Required) 关联 REST API 的 ID。导出属性ids- (Computed) Authorizer 标识符列表List of string。二、示例用法官方文档给出的最小示例data aws_api_gateway_authorizers example { rest_api_id aws_api_gateway_rest_api.example.id }返回结果中example.ids即为该 REST API 下所有 Authorizer 的 ID 数组可直接用于for_each、local聚合等场景。一个更贴近实战的组合结构参考仓库验收测试 authorizers_data_source_test.go先创建 REST API 与两个 Authorizer再用depends_on保证数据源在创建完成后再读取resource aws_api_gateway_rest_api example { name example-api } resource aws_api_gateway_authorizer example { count 2 name example-${count.index} rest_api_id aws_api_gateway_rest_api.example.id authorizer_uri aws_lambda_function.example.invoke_arn authorizer_credentials aws_iam_role.example.arn } data aws_api_gateway_authorizers example { rest_api_id aws_api_gateway_rest_api.example.id depends_on [ aws_api_gateway_authorizer.example[0], aws_api_gateway_authorizer.example[1], ] } output all_authorizer_ids { value data.aws_api_gateway_authorizers.example.ids }需要注意Terraform 数据源默认没有对资源创建动作的依赖感知depends_on在此类“读取刚创建资源”的场景中是保证时序正确的关键写法。仓库验收测试TestAccAPIGatewayAuthorizersDataSource_basic验证了上述配置在创建 2 个 Authorizer 后ids.#等于2。该测试的基础设施由 authorizer_test.go 中的testAccAuthorizerConfig_base提供一个 REST API、一个允许apigateway.amazonaws.com扮演的 IAM Role用于authorizer_credentials、以及一个 Lambda 函数authorizer_uri使用其invoke_arn。三、实现原理读操作只调一次 GetAuthorizers 分页接口数据源实现位于 authorizers_data_source.go。整个读取过程可以归纳为三步组装请求从配置中取出rest_api_id构造apigateway.GetAuthorizersInput{RestApiId: ...}见 第 45-48 行。rest_api_id的常量名为attrRestAPIID定义在 attr_names.go 中值为rest_api_id。分页遍历通过生成的分页函数getAuthorizersPages循环调用GetAuthorizers把每页page.Items中的Id逐个累积进ids切片见 第 51-61 行。写回状态成功后执行d.SetId(apiID)与d.Set(names.AttrIDs, aws.ToStringSlice(ids))见 第 67-68 行。分页游标机制getAuthorizersPages是代码生成产物生成器注释标注于 list_pages_gen.go 文件头其逻辑值得展开lastPage : aws.ToString(output.Position) if !fn(output, lastPage) || lastPage { break } input.Position output.PositionAPI Gateway 的GetAuthorizersAPI 使用position参数做游标式分页当响应中的Position为空字符串时判定为最后一页循环终止否则将Position回写到下一次请求的input.Position继续拉取下一页回调函数fn返回false时可提前中断遍历。这意味着该数据源可以完整覆盖单个 REST API 下的全量 Authorizer不受单页数量限制。从源码结构看同一生成器也为GetDomainNameAccessAssociations生成了相同的分页函数见 list_pages_gen.go是该项目“List 接口分页”的统一模式。错误处理与数据源 ID读取失败时错误会以reading API Gateway Authorizers (rest_api_id): err的格式包装后返回见 第 63-65 行错误信息中包含 REST API ID便于定位数据源的 Terraform 状态 ID 直接取rest_api_idd.SetId(apiID)也就是说同一个rest_api_id对应唯一的数据源实例语义清晰。Schema 结构数据源 Schema 仅有两项idsTypeListComputed元素为字符串即只读输出rest_api_idTypeStringRequired即唯一必填输入见 第 25-37 行。region参数并不出现在 Schema 中它由 Provider 框架层按服务客户端的区域解析逻辑处理默认沿用 Provider 配置。四、与相邻 Authorizer 数据源/资源的分工在 internal/service/apigateway 服务包中与 Authorizer 相关的定义有三个用途各不相同名称类型关键输入关键输出实现文件aws_api_gateway_authorizers数据源rest_api_id必填ids全部 Authorizer ID 列表authorizers_data_source.goaws_api_gateway_authorizer数据源authorizer_idrest_api_id均必填单个 Authorizer 详情arn、authorizer_uri、identity_source、type等authorizer_data_source.goaws_api_gateway_authorizer资源name、rest_api_id、type等完整的 CRUD 管理authorizer.go一个典型的联动写法先用复数数据源拿到全部 ID再按需要引用其中某一个的详细信息locals { first_authorizer_id tolist(data.aws_api_gateway_authorizers.example.ids)[0] } data aws_api_gateway_authorizer picked { rest_api_id aws_api_gateway_rest_api.example.id authorizer_id local.first_authorizer_id }从单资源数据源 authorizer_data_source.go 的 Schema 可以看到它会额外导出arn、authorizer_credentials、authorizer_result_ttl_in_seconds、authorizer_uri、identity_source、identity_validation_expression、name、provider_arns、type等字段适合“已知 ID、需读取详情”的场景而复数数据源刻意保持轻量只返回 ID 列表避免对每个 Authorizer 再发一次 API 请求。五、Authorizer 相关配置背景来自资源定义理解数据源返回的 ID 对应什么实体可以参考资源aws_api_gateway_authorizer的 Schemaauthorizer.goname- (Required) Authorizer 名称rest_api_id- (Required, Forces new resource) 所属 REST API创建后不可变更type- (Optional) 取值TOKEN/REQUEST/COGNITO_USER_POOLS默认TOKENauthorizer_uri- (Optional) Lambda 鉴权函数的 URITOKEN/REQUEST类型下为必需authorizer_credentials- (Optional) 调用 Lambda 时使用的 IAM Role ARN需通过 ARN 格式校验authorizer_result_ttl_in_seconds- (Optional) 鉴权结果缓存秒数范围 0–3600默认 300常量defaultAuthorizerTTL见 authorizer.goidentity_source- (Optional) 身份来源默认method.request.header.Authorizationprovider_arns- (Optional) Cognito User Pool ARN 集合COGNITO_USER_POOLS类型下使用。资源导入格式为REST-API-ID/AUTHORIZER-ID见 导入器实现这也提示了 Authorizer 与 REST API 的归属关系——与复数数据源必须提供rest_api_id才能定位查询范围是一致的。六、小结aws_api_gateway_authorizers是一个职责单一的查询型数据源以rest_api_id为范围通过 AWS SDK 的GetAuthorizers分页接口position游标收集全部 Authorizer ID并写入ids列表属性。源码层面的几个事实值得记住状态 ID 即rest_api_id实现见 authorizers_data_source.go分页由生成的getAuthorizersPages完成Position为空即末页见 list_pages_gen.go它只返回 ID 列表读取单个 Authorizer 的完整属性应搭配aws_api_gateway_authorizer单资源数据源验收测试 authorizers_data_source_test.go 验证了多 Authorizer 场景下ids列表的数量正确性。在需要“枚举 批量引用”的 API Gateway 配置管理场景中该数据源与depends_on时序控制组合使用即可实现可靠的全量 Authorizer 发现。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表