实现一个完整的无服务器搜索应用程序,使用 AWS Amplify、Amazon Cognito、Am
使用 AWS Amplify、Amazon Cognito、Amazon API Gateway、AWS Lambda 和 Amazon OpenSearch Serverless 构建全栈无服务器搜索应用
重点摘要
在这篇文章中,我们将介绍如何构建一个基于 AWS 的全栈无服务器搜索应用。通过结合 AWS 的多种服务,您将能够实现一个强大且具备实时搜索功能的应用。以下是本文的关键要点:
服务架构:使用 AWS Amplify、Amazon Cognito、API Gateway、AWS Lambda、OpenSearch 和 S3。用户体验:强调性能、安全性、多语言支持以及数据存储的优化。实施步骤:提供详细的步骤来部署和测试解决方案。监控和清理:介绍监控 OpenSearch Serverless 的重要性,并提醒用户进行资源清理以避免不必要的费用。在构建全栈搜索应用时,我们需要解决多个挑战,以提供流畅和有效的用户体验。这包括整合来自不同来源的数据、优化用户体验、提供多语言支持,以及在成本、操作性和可靠性方面进行优化。
Amazon OpenSearch Serverless 是一个强大和可扩展的搜索和分析引擎,可以显著提高搜索应用的开发效率。它允许您实时存储、搜索和分析大量数据,提供可扩展性、安全性,并与其他 AWS 服务集成。利用 OpenSearch Serverless,您可以随时搜索和分析大量数据而无需担心底层基础设施和数据管理。OpenSearch Serverless 的 collection 是一组相互协作的 OpenSearch 索引,为特定工作负载或用例提供支持。Collections 具备高容量、分布式和高可用存储能力,同时简化了配置和调优的复杂性。每个创建的集合都配备数据静态加密功能,防止未授权访问。此外,OpenSearch Serverless 还支持 OpenSearch Dashboards,为数据分析提供直观界面。
OpenSearch Serverless 主要支持以下三种用例:
蓝快加速器ios时间序列:聚焦于实时分析大量半结构化、机器生成的数据,以获取运营、安全性、用户行为和商业洞察。搜索:提供全文本搜索,有助于内部网络应用如内容管理系统、法律文件和互联网应用如电商网站搜索和内容搜索。向量搜索:基于向量嵌套的语义搜索,简化向量数据管理,驱动机器学习增强的搜索体验及生成式人工智能应用如聊天机器人、个人助手和欺诈检测。在本篇文章中,我们将逐步演示如何实施一个基于云的全栈无服务器文本搜索应用,主要运用 OpenSearch Serverless。
解决方案概述
解决方案使用了以下服务:
AWS Amplify:为前端开发者提供快速构建无服务器应用所需的工具和功能。在本解决方案中使用 Amplify CLI 构建服务器端电影搜索网站,创建 Amazon Cognito 用户池、API Gateway、Lambda 函数和 Amazon S3 存储等资源。
Amazon API Gateway:一个完全托管的服务,使开发者能够简便地创建、发布、维护和监控 APIs。我们将 API Gateway 用作电影搜索应用的“前门”来搜索电影。
AWS CloudFront:加速全球用户访问静态和动态网页、视频流和 APIs 的内容,降低延迟。我们使用 CloudFront 和 Amazon S3 将搜索应用的用户界面交付给终端用户。
Amazon Cognito:简化身份验证、用户管理和数据同步,无需编写后台代码或管理基础设施。我们通过 Amazon Cognito 创建用户池,以便终端用户登录电影搜索应用。
AWS Lambda:一款无服务器的事件驱动计算服务,让您无需预置或管理服务器即可运行代码。我们的解决方案使用 Lambda 函数查询 OpenSearch Serverless,API Gateway 将所有请求转发给 Lambda 函数处理。
Amazon OpenSearch Serverless:OpenSearch Service 的无服务器选项。本文中使用常见方法在 OpenSearch Service 中搜索文档以提升搜索体验,例如使用特定领域语言DSL的请求体搜索。
Amazon Simple Storage Service (S3):提供领先的可扩展性、数据可用性、安全性和性能的对象存储服务。该解决方案使用 Amazon S3 存储电影预告片。
AWS WAF:保护 Web 应用程序免受攻击,允许您根据自定义条件配置规则来允许、阻止或监控 Web 请求。我们使用 AWS WAF 限制仅允许白名单中的 IP 地址访问电影搜索应用。
下图展示了该解决方案的架构:
工作流程包含以下步骤:
最终用户通过浏览器或移动设备访问 CloudFront 和 Amazon S3 托管的电影搜索网站。用户使用凭据登录。向 Amazon Cognito 用户池发送请求以获取登录身份验证令牌,并成功登录后收到令牌。搜索应用通过 API Gateway 的授权头调用搜索 API 方法。API Gateway 受 AWS WAF 保护,以强制执行速率限制和允许/拒绝列表。API Gateway 将令牌传递给 Amazon Cognito 用户池进行验证,Amazon Cognito 验证令牌并向 API Gateway 返回响应。API Gateway 触发 Lambda 函数处理请求。Lambda 函数查询 OpenSearch Serverless 并返回搜索元数据。根据元数据,从 Amazon S3 向用户返回内容。接下来的部分将引导您完成部署、数据摄取和测试解决方案的步骤。
前提条件
在开始之前,请确保完成以下前提条件:
安装 Nodejs 最新 LTS 版本。安装并配置 AWS Command Line InterfaceAWS CLI。安装 awscurl 进行数据摄取。请 安装 和 配置 Amplify CLI。在配置结束时,您应成功设置新的用户,并使用 amplifydev 用户的 AccessKeyId 和 SecretAccessKey 在本地机器的 AWS 配置文件中。Amplify 用户需要额外权限才能部署 AWS 资源。请遵循以下步骤创建新的内联 AWS 身份与访问管理IAM策略,并附加至该用户:
在 IAM 控制台中,在导航窗格中选择 用户。
选择用户 amplifydev。
在 权限 标签中,选择 添加权限 下拉菜单,然后选择 内联策略。
在策略编辑器中,选择 JSON。
您应该会看到默认 IAM 语句的 JSON 格式。
复制 AddionalPermissionsAmplify 中的文件内容,替换为您的目标 AWS 区域、账户和环境。在执行 amplify init 时,需要使用该环境名称来启动后端。IAM 语句中的操作大多是开放的,但根据目标资源设有限制;此操作是为了满足最大内联策略长度2048 字符。
将更新后的 JSON 输入到策略编辑器中,然后选择 下一步。
为 策略名称 输入一个名称在此文中,用 AddionalPermissionsAmplify。
选择 创建策略。
现在您应该会看到新的内联策略已附加到该用户上。
部署解决方案
请按照以下步骤部署解决方案:
使用以下命令在桌面的新文件夹中克隆 存储库:

bashgit clone https//githubcom/awssamples/amazonopensearchserverlesssearchappgit
部署电影搜索的 后端。
部署电影搜索的 前端。数据摄取
若要将示例 电影数据 导入新创建的 OpenSearch Serverless 集合,请完成以下步骤:
在 OpenSearch Service 控制台中,选择导航窗格中的 摄取:管道。选择管道 movieingestion,并找到摄取 URL。替换下述代码段中的摄取端点和区域,并运行 awscurl 命令以将数据保存到集合中:
bashawscurl service osis region ltregiongt X POST H ContentType application/json d @projectassets/moviesdatajson https//ltingesturlgt/movieingestion/data
您应该会看到 200 OK 响应。
在 Amazon S3 控制台中,打开预告片的 S3 存储桶作为后端部署的一部分创建。上传一些电影预告片。确保文件名与示例 电影数据 中的 ID 字段匹配例如 tt1981115mp4、tt0800369mp4 和 tt0172495mp4。上传 ID 为 tt0172495mp4 的预告片将作为所有电影的默认预告片,而不需要为每部电影单独上传一个。
测试解决方案
使用 CloudFront 分发域名访问应用程序。您可以通过打开 CloudFront 控制台,选择分发并将分发的域名复制到浏览器中找到该域名。
通过输入用户名、密码和电子邮件地址注册应用访问。密码应至少包含八个字符,并且需包括至少一个大写字母和符号。
登录后,您将被重定向到电影查找主页面。
您可以通过电影名称、演员或导演进行搜索,如下所示。应用程序使用 OpenSearch DSL 返回结果。
如果搜索结果过多,您可以通过页面底部的分页选项导航查看。有关应用程序如何使用分页的信息,请参见 分页搜索结果。
您可以选择电影标题以获取更多细节并观看预告片,前提是您已按照可选步骤上传电影预告片。
您还可以使用 排序依据 功能对搜索结果进行排序。应用程序利用 OpenSearch 中的 排序功能。
还可以使用许多 DSL 搜索模式进行复杂搜索。有关详细信息,请参见 查询 DSL。
监控 OpenSearch Serverless
监控是维护 OpenSearch Serverless 及其他 AWS 服务的可靠性、可用性和性能的一个重要部分。AWS 提供 Amazon CloudWatch 和 AWS CloudTrail 以监控 OpenSearch Serverless,报告问题并在必要时采取自动行动。有关更多信息,请参见 监控 Amazon OpenSearch Serverless。
清理工作
为避免不必要的费用,通过在您在项目根文件夹使用 git clone 命令创建运行以下命令来清理解决方案的实现:
bashamplify delete
您还可以通过删除作为设置一部分部署的 AWS CloudFormation 堆栈来清理解决方案。有关说明,请见 在 AWS CloudFormation 控制台上删除堆栈。
结论
在本文中,我们实现了一个基于 OpenSearch Serverless 的全栈无服务器搜索应用。该解决方案与多种 AWS 服务无缝集成,包括用于无服务器计算的 Lambda、构建 RESTful APIs 的 API Gateway、用于强大安全性的 IAM、用于简化用户管理的 Amazon Cognito,以及用于保护 Web 应用程序的 AWS WAF。采用无服务器架构,搜索应用程序提供了多个优势,包括简化的部署流程和轻松的可扩展性,受益于托管基础设施。
借助 OpenSearch Serverless,您获得与 OpenSearch Service 相同的交互式毫秒响应时间,同时享受