为 Amazon Keyspaces 数据启用高级搜索功能,通过与 Amazon OpenSearc
整合 Amazon Keyspaces 和 Amazon OpenSearch 服务以启用高级搜索功能
作者:Rajesh Kantamani 和 Sylvia Qi 日期:2024年2月26日
关键要点
本文介绍如何通过整合 Amazon Keyspaces 和 Amazon OpenSearch 服务来实现高级搜索功能。利用 AWS Lambda 和 OpenSearch Ingestion 进行数据流转,简化搜索操作。提供了参考架构、基础设施设置的逐步指南及示例代码。Amazon Keyspaces适用于 Apache Cassandra是一项完全托管的无服务器、兼容 Apache Cassandra 的数据库服务,适合需要高可用性、耐用性和快速 NoSQL 数据库后台的开发人员。当您开始设计 Amazon Keyspaces 的数据模型时,了解访问模式至关重要。这有助于均匀分配数据,使应用程序实现最佳的读写吞吐量。若应用程序需要更多查询功能,例如对存储在表中的数据进行全文搜索,您可以考虑使用 Amazon OpenSearch 服务 来满足这些需求。
解决方案概述
AnyCompany 是一家快速成长的电子商务平台,它面临着高效管理庞大的产品和物品目录的挑战。目前,由于搜索能力有限,客户难以快速找到特定的产品。为了解决这个问题,AnyCompany 计划实施高级搜索功能,使客户能够轻松查找产品。这一改进预计将显著提升客户满意度,并简化购物流程,从而助力销售和客户留存。
以下图表展示了解决方案架构:
该工作流程包括以下步骤:1 配置 Amazon API Gateway 以在需要插入、更新或删除 Amazon Keyspaces 中的数据时发出对 Amazon Lambda 函数的 POST 请求。2 Lambda 函数将该修改传递给 Amazon Keyspaces,并在等待 Amazon Keyspaces 的成功返回代码之前保持变更状态。3 收到代码 200 后,Lambda 函数异步发起对 OpenSearch Ingestion 数据管道的 HTTP 请求。4 OpenSearch Ingestion 过程将事务数据移动至 OpenSearch Serverless 集合。5 然后,我们利用 OpenSearch Dashboards 中的开发工具来执行各种搜索模式。
前提条件
完成以下前提条件步骤:
确保已安装 AWS 命令行界面 (AWS CLI),并设置了 用户配置文件。安装 Nodejs npm 和 AWS CDK 工具包。安装 Python 和 jq。使用集成开发环境 (IDE),如 Visual Studio Code。部署解决方案
该解决方案详细描述在 AWS CDK 项目中。如果您没有 AWS CDK 的经验,请完成以下步骤来部署解决方案:
将 GitHub 仓库 克隆到您的 IDE,并导航到克隆仓库的目录: bash git clone ltrepolinkgt cd ltrepodirgt
在 MacOS 和 Linux 上,完成以下步骤以设置您的虚拟环境:
创建一个虚拟环境: bash python3 m venv venv激活虚拟环境: bash source venv/bin/activate
对于 Windows 用户,激活虚拟环境: bash venvScriptsactivatebat
激活虚拟环境后,安装所需的依赖项: bash (venv) pip install r requirementstxt
在您的帐户中引导 AWS CDK: bash (venv) cdk bootstrap aws//ltawsaccountidgt/ltawsregiongt
您可以对该代码合成 CloudFormation 模板: bash (venv) export CDKDEFAULTACCOUNT=(aws sts getcalleridentity query Account output text) (venv) export CDKDEFAULTREGION=ltawsregiongt (venv) cdk synth c iamusername=ltyouriamusernamegt all
使用 cdk deploy 命令创建堆栈: bash (venv) cdk deploy c iamusername=ltyouriamusernamegt all

部署完成后,您将在 AWS CloudFormation 控制台看到以下 CloudFormation 堆栈: OpsApigwLambdaStack OpsServerlessIngestionStack OpsServerlessStack OpsKeyspacesStack OpsCollectionPipelineRoleStack
CloudFormation 堆栈详情
CloudFormation 模板部署以下组件:
一个名为 keyspacesOpenSearchEndpoint 的 API,处理通过 POST 方法到 Lambda 的变更操作插入、更新和删除,与 OpenSearch Ingestion 兼容。一个名为 productsearch 的关键空间,以及一个名为 productbyitem 的表。该表的选择分区键为 productid。
一个名为 OpsApigwLambdaStackApiHandler 的 Lambda 函数,将事务转发给 Amazon Keyspaces。在事务提交后,我们向客户端返回 200 的响应代码,同时异步将事务发送到 OpenSearch Ingestion 管道。
名为 serverlessingestion 的 OpenSearch Ingestion 管道。该管道在名为 products 的索引下将记录发布到 OpenSearch Serverless 集合中。此集合的键为 productid,且管道定义了它可以处理的操作。测试解决方案
以下是测试解决方案的步骤:
一元机场. cn在 API Gateway 控制台中,导航到您的 API 并选择 ANY 方法。选择 Test 标签。
对于 Method type,选择 POST。这是 OpenSearch Ingestion 支持的唯一方法,用于任何插入、删除或更新。
对于 Request body,输入以下样本请求: json {operation insert item {productid 1 productname Reindeer sweater productdescription A Christmas sweater for everyone in the family}}
如果测试成功,您应该会在 API Gateway 中看到返回代码为 200的响应。
运行样本查询以确认您通过 API Gateway 加载的数据实际上已保存在 OpenSearch Service 中:bashawscurl service aoss region useast1 X POST lt OpenSearchEndpointgt/products/search H ContentType application/json d { query { term { productname sweater } } } jq
监控
您可以使用 Amazon CloudWatch 来监控数据管道的指标。以下图表显示成功发送到 OpenSearch Service 的文档数量。
结论
在本文中,我们探讨了如何通过利用 OpenSearch Service 的功能,启用对存储在 Amazon Keyspaces 中的数据的多样化搜索场景。通过使用 Lambda 和 OpenSearch Ingestion,我们无缝管理数据的流动。此外,我们还提供了使用 CloudFormation 模板测试已部署解决方案的见解,以确保全面理解其实际应用及有效性。
请按照本文描述的程序测试提供的示例代码,并在评论区分享您的反馈。
关于作者
Rajesh,高级数据库解决方案架构师,专注于帮助客户设计、迁移和优化 Amazon Web Services 上的数据库解决方案。业余时间,他喜欢与家人和朋友一起享受户外活动。
Sylvia,高级 DevOps 架构师,专注于设计和自动化 DevOps 过程,指导客户进行 DevOps 转型。闲暇时,她喜欢骑车、游泳、练习瑜伽和摄影。