尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

使用 Terraform AWS Provider 数据源读取 Kendra 查询建议屏蔽列表:aws_kendra_query_suggestions_block_list 完全指南

发布时间:2026/9/19 9:39:57

资讯中心
01
ARTICLE

使用 Terraform AWS Provider 数据源读取 Kendra 查询建议屏蔽列表:aws_kendra_query_suggestions_block_list 完全指南

使用 Terraform AWS Provider 数据源读取 Kendra 查询建议屏蔽列表:aws_kendra_query_suggestions_block_list 完全指南
使用 Terraform AWS Provider 数据源读取 Kendra 查询建议屏蔽列表aws_kendra_query_suggestions_block_list 完全指南【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇指南围绕 terraform-provider-aws 中aws_kendra_query_suggestions_block_list数据源展开讲解如何通过 Terraform 按index_id与query_suggestions_block_list_id精确读取 Amazon Kendra 索引下查询建议屏蔽列表Query Suggestions Block List的全部元数据——包括 ARN、S3 源路径、状态、标签等并深入源码剖析其底层读取流程、ID 规则与验证逻辑帮助你安全引用已存在的屏蔽列表而无需重复管理。一、背景什么是 Kendra 查询建议屏蔽列表Amazon Kendra 的查询建议Query Suggestions功能会基于索引内容为用户搜索框提供自动补全建议。为避免出现不当或无效的补全词条Kendra 允许为索引挂载一个屏蔽列表Block List一个存放在 S3 中的文本文件列出需要从建议结果中排除的单词或短语。屏蔽列表属于索引Index级附属对象因此其标识天然由块列表 ID与所属索引 ID两部分构成。在 terraform-provider-aws 中管理该对象对应资源 aws_kendra_query_suggestions_block_list资源而本文主角——数据源 aws_kendra_query_suggestions_block_list数据源——则用于只读查询已存在的屏蔽列表细节典型场景包括在多套 Terraform 配置之间共享同一屏蔽列表的 ARN 或状态信息在 CI/CD 中校验屏蔽列表是否已进入ACTIVE状态引用其source_s3_path、role_arn等属性作为下游资源输入。二、基础用法最小的数据源配置数据源只需两个必填参数即可完成查询data aws_kendra_query_suggestions_block_list example { index_id 12345678-1234-1234-1234-123456789123 query_suggestions_block_list_id 87654321-1234-4321-4321-321987654321 }执行terraform plan后即可通过data.aws_kendra_query_suggestions_block_list.example.arn、.status、.source_s3_path[0].bucket等方式引用查询结果。与资源配合的推荐写法实际生产环境中屏蔽列表通常由同一配置内的资源创建此时应通过资源引用直接传入标识避免硬编码 IDdata aws_kendra_query_suggestions_block_list example { index_id aws_kendra_index.example.id query_suggestions_block_list_id aws_kendra_query_suggestions_block_list.example.query_suggestions_block_list_id }这一用法也正是仓库内验收测试的标准形态可参考 query_suggestions_block_list_data_source_test.go 中的testAccQuerySuggestionsBlockListDataSourceConfig_basic。三、参数Argument Reference数据源支持以下参数参数必填说明index_id是屏蔽列表所属 Kendra 索引的标识符query_suggestions_block_list_id是屏蔽列表自身的标识符region否资源将被管理的区域默认取 Provider 配置 中设置的 Region值得强调的是index_id与query_suggestions_block_list_id并非任意字符串。从源码 query_suggestions_block_list_data_source.go 可见两者都通过validation.StringMatch注册了严格的正则校验[0-9A-Za-z][0-9A-Za-z-]{35}即以字母或数字开头后续可为字母、数字与连字符固定长度为 36 位Kendra 生成的 UUID 格式 ID。若传入不满足该模式的字符串terraform validate/plan阶段便会直接报错提示 Starts with an alphanumeric character. Subsequently, can contain alphanumeric characters and hyphens. Fixed length of 36.。四、导出属性Attribute Reference除上述参数外数据源还会导出以下只读属性属性类型说明arnstring屏蔽列表的 ARNcreated_atstring屏蔽列表的创建时间RFC3339 格式descriptionstring屏蔽列表的描述error_messagestring处理屏蔽列表出错时包含细节的错误信息file_size_bytesint屏蔽列表文本文件在 S3 中的当前大小字节idstring屏蔽列表与索引的唯一标识以斜杠/分隔item_countint屏蔽列表文本文件中当前有效、非空的单词或短语数量namestring屏蔽列表的名称role_arnstring有权访问包含屏蔽列表 S3 桶的 IAM 角色 ARNsource_s3_pathlist屏蔽列表输入数据在 S3 中的位置结构见下statusstring屏蔽列表当前状态值为ACTIVE时表示已就绪可用updated_atstring屏蔽列表最后更新时间RFC3339 格式tagsmap组织屏蔽列表的元数据标签其中source_s3_path块内包含两个属性bucket—— 存放文件的 S3 桶名称key—— 文件名。id的组装规则在源码 query_suggestions_block_list_data_source.go 中为fmt.Sprintf(%s/%s, querySuggestionsBlockListID, indexID)即块列表ID/索引ID的斜杠拼接格式与解析函数 QuerySuggestionsBlockListParseResourceID 要求的QUERY_SUGGESTIONS_BLOCK_LIST_ID/INDEX_ID完全对称可在资源与数据源之间互相转换引用。五、源码解读数据源底层是如何读取的aws_kendra_query_suggestions_block_list数据源的完整实现位于 query_suggestions_block_list_data_source.go其读取流程如下获取客户端meta.(*conns.AWSClient).KendraClient(ctx)拿到 Kendra 服务客户端同时读取IgnoreTagsConfig用于后续标签过滤。调用 Find 函数通过 FindQuerySuggestionsBlockListByID 发起DescribeQuerySuggestionsBlockListAPI 请求入参为Id与IndexId。该 Find 函数将 AWS 返回的ResourceNotFoundException包装为retry.NotFoundError并将空响应转换为EmptyResultError从而与上游retry/tfresource工具链协同。构造并回填属性使用arn.ARN结构体按index/{indexId}/query-suggestions-block-list/{blockListId}的资源路径拼装 ARNPartition/Region/AccountID 取自客户端上下文created_at与updated_at均通过aws.ToTime(...).Format(time.RFC3339)统一序列化为 RFC3339 时间字符串。扁平化 S3 路径flattenSourceS3Path见 flex.go将 AWS SDK 的*types.S3Path转换为[]any形式的 map供source_s3_path块消费。拉取标签基于刚构造的 ARN 调用listTags并依次执行tags.IgnoreAWS().IgnoreConfig(ignoreTagsConfig)过滤 AWS 保留标签与用户配置的忽略标签后写入tags属性。测试方面query_suggestions_block_list_data_source_test.go 中的TestAccKendraQuerySuggestionsBlockListDataSource_basic覆盖了两类关键场景不存在场景传入tf-acc-test-does-not-exist-kendra-id这类无效 ID断言报错信息匹配正则reading Kendra QuerySuggestionsBlockList对应 Read 函数中sdkdiag.AppendErrorf(diags, reading Kendra QuerySuggestionsBlockList (%s): ...)的错误前缀正向场景创建资源后用TestCheckResourceAttrPair逐一比对数据源与资源导出的arn、description、id、index_id、name、role_arn、status、source_s3_path、tags等属性验证数据源与资源读出的数据完全一致。屏蔽列表的完整前置条件测试基座 testAccQuerySuggestionsBlockListBaseConfig 展示了屏蔽列表可查询的完整前置依赖可作为你自建环境的最小参考一个存放屏蔽文本文件的S3 桶与对象如test/suggestions.txt一个信任kendra.${data.aws_partition.current.dns_suffix}的IAM 角色附带kendra:*、s3:GetBucketLocation、s3:GetObject、s3:ListBucket权限的 IAM 策略并完成角色挂载依赖以上角色的Kendra 索引aws_kendra_index。六、与配套资源的联动创建、更新与导入虽然数据源本身只读但理解其配套资源 aws_kendra_query_suggestions_block_list 有助于你构建创建→查询→引用的完整链路。资源侧的关键参数包括index_id必填ForceNew—— 所属索引name必填、role_arn必填经verify.ValidARN校验、source_s3_path必填MaxItems: 1description可选、tags可选。资源操作超时均为30 分钟create/update/delete底层通过waitQuerySuggestionsBlockListCreated/Updated/Deleted轮询DescribeQuerySuggestionsBlockList的状态迁移创建阶段等待CREATING → ACTIVE更新阶段等待UPDATING → ACTIVE且均要求连续两次观察到目标状态ContinuousTargetOccurence: 2若期间状态变为FAILED或ACTIVE_BUT_UPDATE_FAILED等待器会把 API 返回的ErrorMessage注入最终错误方便排查见 query_suggestions_block_list.go。导入时同样遵循斜杠格式Terraform v1.5.0 的 import 块写法如下import { to aws_kendra_query_suggestions_block_list.example id blocklist-123456780/idx-8012925589 }命令行方式terraform import aws_kendra_query_suggestions_block_list.example blocklist-123456780/idx-8012925589七、实践要点与注意事项ID 是唯一的查询凭据数据源不支持按名称搜索必须同时提供index_id与query_suggestions_block_list_id两个 36 位 UUID。若二者不匹配如索引 ID 错误Kendra API 会返回ResourceNotFoundExceptionTerraform 将报reading Kendra QuerySuggestionsBlockList错误。status是判断可用性的核心信号屏蔽列表仅在ACTIVE状态下才真正生效CREATING、UPDATING、FAILED、ACTIVE_BUT_UPDATE_FAILED等状态可通过error_message与file_size_bytes、item_count辅助诊断。tags已做过滤处理数据源返回的tags经过IgnoreAWS()剔除 AWS 保留标签与IgnoreTagsConfig剔除用户配置的忽略标签双重过滤与 Provider 层面的标签忽略配置保持一致。region参数按需使用默认继承 Provider 配置的区域仅当屏蔽列表位于其他区域时才显式指定否则 API 会因区域不匹配而查询失败。如需进一步深入可继续阅读数据源实现 query_suggestions_block_list_data_source.go、配套资源实现 query_suggestions_block_list.go以及 ID 解析工具 id.go完整把握该数据源从 Schema 定义到 API 调用的全部细节。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。