ARTICLE DETAIL

资讯详情

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

Terraform AWS Provider 数据源 aws_kendra_thesaurus 完全指南:读取 Amazon Kendra 词库详情

Terraform AWS Provider 数据源 aws_kendra_thesaurus 完全指南:读取 Amazon Kendra 词库详情 Terraform AWS Provider 数据源 aws_kendra_thesaurus 完全指南读取 Amazon Kendra 词库详情【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws导读aws_kendra_thesaurus是 Terraform AWS Provider本项目 terraform-provider-aws为 Amazon Kendra 智能检索服务提供的只读数据源用于按index_id索引标识符与thesaurus_id词库标识符查询已存在词库Thesaurus的完整信息包括 ARN、状态、同义词规则数量、词条数量、S3 源文件路径与标签等。读完本文你将掌握该数据源的全部参数与导出属性、与aws_kendra_thesaurus管理资源的组合用法并了解其背后的 SDKv2 数据源实现与 AWS KendraDescribeThesaurusAPI 调用链路。数据源概述与适用场景Amazon Kendra 的词库Thesaurus允许你自定义同义词规则用于扩展索引的查询理解能力。词库文件存放在 S3 中由 Kendra 服务读取并构建同义词映射。aws_kendra_thesaurus数据源解决的核心问题是当词库不是由当前 Terraform 配置管理例如由其他团队或手工创建时如何安全地引用它的元数据。典型应用场景包括在同一配置或不同配置之间共享词库 ARN、名称、状态等元数据在模块化 Terraform 工程中通过数据源把外部词库的name、role_arn等值传给其他资源使用编写条件判断或输出时读取status、synonym_rule_count、term_count等状态信息。该数据源对应的官方文档位于 website/docs/d/kendra_thesaurus.html.markdown实现代码位于 internal/service/kendra/thesaurus_data_source.go。基础示例按 ID 查询词库数据源仅需两个必填参数index_id与thesaurus_id。两个 ID 都可以从aws_kendra_thesaurus资源或其他渠道获得data aws_kendra_thesaurus example { index_id 12345678-1234-1234-1234-123456789123 thesaurus_id 87654321-1234-4321-4321-321987654321 }查询完成后即可在输出或下游配置中引用其属性output thesaurus_arn { value data.aws_kendra_thesaurus.example.arn } output thesaurus_status { value data.aws_kendra_thesaurus.example.status } output thesaurus_term_count { value data.aws_kendra_thesaurus.example.term_count }与资源组合的完整用法实践中更常见的写法是先用aws_kendra_thesaurus资源创建词库需要同属一个aws_kendra_index词库文件来自 S3再用本数据源读取其详情从而避免手写易错的 ID。参照仓库中的验收测试配置 internal/service/kendra/thesaurus_data_source_test.go一个完整的组合示例为resource aws_kendra_thesaurus test { index_id aws_kendra_index.test.id name example-thesaurus description example description thesaurus role_arn aws_iam_role.test.arn source_s3_path { bucket aws_s3_bucket.test.id key aws_s3_object.test.key } tags { Key1 Value1 } } data aws_kendra_thesaurus test { index_id aws_kendra_index.test.id thesaurus_id aws_kendra_thesaurus.test.thesaurus_id }其中aws_kendra_index.test.id是 Kendra 索引的标识符36 位 UUID 形式aws_kendra_thesaurus.test.thesaurus_id是词库自身的标识符词库源文件同义词规则文件必须先上传到 S3source_s3_path指向该文件Kendra 通过role_arn对应的 IAM 角色读取该文件因此角色需要具备对 S3 桶与对象的访问权限。数据源的tags、description、status等属性会与资源侧保持一致验收测试通过TestCheckResourceAttrPair逐项断言了这种一致性例如arn、description、index_id、name、role_arn、status、source_s3_path、thesaurus_id以及tags均与aws_kendra_thesaurus.test对应相等见 thesaurus_data_source_test.go。参数参考Argument Reference数据源支持以下参数参数必填说明index_id是词库所属 Kendra 索引的标识符。源码中通过正则[0-9A-Za-z][0-9A-Za-z-]{35}校验要求以字母或数字开头、后续可含字母数字与连字符、固定长度为 36见 thesaurus_data_source.go即通常为 UUID 格式。thesaurus_id是词库自身的标识符。源码中校验长度为 1100并匹配正则[0-9A-Za-z][0-9A-Za-z_-]*即以字母或数字开头后续可含字母、数字、连字符与下划线见 thesaurus_data_source.go。region否词库所在区域。默认使用 provider 配置 中设置的区域。适用于跨区域读取词库元数据的场景。两个必填参数的校验规则与aws_kendra_thesaurus资源侧保持一致资源的index_id同样是Required且ForceNewthesaurus_id为Computed由 API 返回具体可见 internal/service/kendra/thesaurus.go。属性参考Attribute Reference除上述参数外数据源还导出以下只读属性属性类型说明idstring词库标识符与索引标识符以斜杠/连接格式为thesaurus_id/index_id。arnstring词库的 ARN。created_atstring词库创建时间RFC3339 格式。descriptionstring词库描述。error_messagestring当status为FAILED时包含失败原因说明。file_size_bytesnumber词库文件大小字节。namestring词库名称。role_arnstring有权访问包含词库文件的 S3 桶的 IAM 角色 ARN。source_s3_pathobject词库输入数据在 S3 中的位置结构详见下节。statusstring词库状态当值为ACTIVE时表示可正常使用。synonym_rule_countnumber词库文件中的同义词规则数量。term_countnumber词库文件中的唯一词条数量。例如同义词a,b,c与adterm count 为 4。updated_atstring词库最近更新时间RFC3339 格式。tagsmap词库的标签元数据。source_s3_path 嵌套块source_s3_path为只读嵌套块包含两个属性属性类型说明bucketstring包含词库文件的 S3 桶名称。keystring词库文件名对象键。在 HCL 中引用时使用索引语法例如data.aws_kendra_thesaurus.example.source_s3_path[0].bucket与data.aws_kendra_thesaurus.example.source_s3_path[0].key。源码中该块通过flattenSourceS3Path从 AWS SDK 的*types.S3Path对象展开为列表见 internal/service/kendra/flex.go当 API 未返回 S3 路径时该块为null。源码级原理数据源读取链路从实现层面看该数据源是一个标准的 Terraform Plugin SDKv2 数据源其读取逻辑集中在 thesaurus_data_source.go 的dataSourceThesaurusRead函数中整体链路如下获取客户端通过meta.(*conns.AWSClient).KendraClient(ctx)取得 Kendra 服务的 AWS SDK for Go v2 客户端调用查找函数将thesaurus_id与index_id传入FindThesaurusByID见 internal/service/kendra/find.go其内部调用 Kendra APIDescribeThesaurus若 API 返回ResourceNotFoundException则包装为retry.NotFoundError数据源读取会报错退出若返回空结果则抛出空结果错误否则返回词库详情对象构造并写入属性基于返回对象依次写入arn、created_at、description、error_message、file_size_bytes、index_id、name、role_arn、status、synonym_rule_count、term_count、thesaurus_id、updated_at。其中ARN 并非来自 API而是在 Provider 内部按arn:partition:kendra:region:account:index/{index_id}/thesaurus/{thesaurus_id}模板拼装而成时间字段created_at、updated_at通过aws.ToTime(...).Format(time.RFC3339)转换为 RFC3339 字符串source_s3_path使用flattenSourceS3Path展开读取标签调用listTags基于 ARN 列出标签并经IgnoreAWS()与IgnoreConfig(ignoreTagsConfig)过滤后写入tags属性tags在数据源侧为 Computed见 thesaurus_data_source.go设置 ID最终以fmt.Sprintf(%s/%s, thesaurusID, indexID)设置id即文档所述的thesaurus_id/index_id格式。值得注意的验证细节是数据源在读取不存在的词库时会以reading Kendra Thesaurus为前缀返回错误。仓库的验收测试专门用一个不存在的配置断言了该错误见 thesaurus_data_source_test.go 与testAccThesaurusDataSourceConfig_nonExistent说明查询不存在的词库会直接报错而不是静默返回空数据。常见问题与使用提示status 为FAILED怎么办查看error_message属性获取失败原因。常见诱因包括 IAM 角色role_arn缺少对 S3 源文件的读取权限、词库文件格式不符合 Kendra 同义词文件规范等。term_count 如何理解它统计的是词库文件中的唯一词条数。例如同义词a,b,c视作 3 个词条ad视作 1 个合计 4。ID 格式提醒数据源的id为thesaurus_id/index_id顺序该格式与 aws_kendra_thesaurus 资源 的导入 ID 约定一致资源侧SetId同样采用thesaurus_id/index_id格式见 thesaurus.go因此数据源读取到的id可直接用于资源的terraform import场景参考。跨区域读取如词库位于非默认区域请通过region参数显式指定否则 Provider 会使用自身配置的区域发起 API 调用。延伸阅读数据源文档website/docs/d/kendra_thesaurus.html.markdown数据源实现internal/service/kendra/thesaurus_data_source.go资源实现创建/更新/删除与导入internal/service/kendra/thesaurus.go底层查找逻辑DescribeThesaurus调用与 NotFound 处理internal/service/kendra/find.goS3 路径的展开/折叠转换internal/service/kendra/flex.go数据源验收测试internal/service/kendra/thesaurus_data_source_test.go同服务其余 Kendra 资源的实现与注册internal/service/kendra/service_package_gen.go【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表