视频

了解更多
在本博文中,您将学习如何集成 AWS Lambda 和 Redis Enterprise Cloud。通过一个示例电影数据库应用程序,您将了解如何构建和部署两个 Lambda 函数,一个用 Node.js 编写,一个用 Python 编写。 这两个 Lambda 函数用于与 Redis 数据库交互,以插入、更新、删除和查询。该应用程序使用 RediSearch API,该 API 提供丰富的查询和搜索功能。无服务器,使用 AWS Lambda,符合微服务架构的日益增长的趋势,因为它允许开发人员将业务“服务”的范围缩小到一个可以使用他们选择的编程语言实现的小项目。要了解更多信息,请观看下面的视频,并继续阅读 AWS Lambda 的快速概述以及如何使用 Redis Enterprise Cloud 和 Lambda 构建应用程序的更深入的讲解
如果您还不熟悉 AWS Lambda,即该公司Serverless计算运行时,也称为函数即服务 (FaaS)——以下是您需要了解的基础知识。(Lambda 专家可以跳到下一节。)AWS Lambda 允许应用程序根据特定事件按需运行函数,使其成为构建事件驱动架构 (EDA) 应用程序的好方法。AWS Lambda 函数由 AWS 完全管理,可以使用各种 编程语言 创建。也许 AWS Lambda 最好的部分是,开发人员通常不需要完全理解应用程序生命周期就可以使用它。
可以使用几种不同的方法调用 AWS Lambda:直接从 AWS 控制台调用,使用来自其他 AWS 服务(如 SNS、SQS 或 Kinesis)的事件调用,甚至从 AWS 控制台、CloudWatch 或 S3 事件调用。在我们的示例电影数据库应用程序中,Lambda 函数将使用 HTTP REST 端点调用,这是使用 AWS API Gateway 完成的。 (您可以在 文档中找到有关 AWS Lambda 函数调用的更多信息。)
AWS Lambda HTTP 执行过程
具体来说,通过 HTTP 的请求被路由到 AWS 的 API Gateway 管理工具,该工具解析正文、标头和参数,然后使用此有效负载触发我们的 Lambda 函数
作为开发人员,您只需编写代码来公开 REST 端点,并配置部署以在 AWS API Gateway 中公开它。(我们将在下一节讨论示例电影数据库应用程序时进一步讨论这一点。)
无服务器应用程序中的状态和数据管理
AWS Lambda 是一个无状态环境。但是,在许多应用程序中,您仍然希望在服务或调用之间共享状态,而 Redis 可以提供帮助。对于简单的状态管理,AWS 开发人员通常使用 ElastiCache,但许多应用程序需要的不仅仅是状态管理,他们还需要持久性、丰富的数据、高性能和查询模型。Redis Enterprise Cloud 在 AWS 上提供完全托管的服务(也支持 Google Cloud 和 Microsoft Azure)。
现在我们准备好查看我们的示例电影数据库应用程序,以了解使用 Redis Enterprise Cloud 和 AWS Lambda 构建应用程序的关键步骤。
该应用程序使用 RediSearch Getting Started 教程中记录的数据集,该数据集由一个电影目录组成,由 Redis 哈希组成。 如下图所示,前端是使用 Vue.js 构建的,它调用 REST 端点来
如上所述,该应用程序利用 AWS API Gateway、AWS Lambda 和 Redis Enterprise Cloud 作为数据存储。此外,Python 服务使用 AWS Key Management Service 来存储和加密 Redis 数据库密码。
要开始使用,您需要一些先决条件
一旦您组装好所有内容,让我们逐步完成安装和运行示例应用程序的过程。
第 1 步:获取 Redis Enterprise Cloud 数据库信息
如果您尚未在 Redis Enterprise Cloud 上创建数据库,请使用我们的 Redis 模块入门 指南中的信息进行创建。
当您连接到 Redis Enterprise Cloud 时,您可以在 Web 控制台中找到数据库连接信息; 确保将模块“RediSearch 2”添加到数据库。
您将需要以下属性才能将 Lambda 函数连接到您的 Redis 数据库
第 2 步:从 GitHub 获取项目
将存储库克隆到您的本地环境,并将其移动到项目目录
> git clone https://github.com/redis-developer/aws-redis-cloud-demo.git > cd aws-redis-cloud-demo
项目目录结构如下所示
aws-redis-cloud-demo ├── README.md ├── front-end => Vue.js project │ ├── .env.development => to set the Lambda URLs in dev mode │ ├── .env.production => to set the Lambda URLs in production mode │ ├── ... │ └── vue.config.js │ └── ... ├── movie-comments-microservice => The Python, comments service │ ├── .chalice │ │ └── config.json => Lambda & Service configuration │ ├── app.py │ ├── chalicelib => Contains application code and lib │ │ └── …. │ ├── readme.md │ └── requirements.txt └── movies-list-microservice => The Node.js, movie service ├── import_movies.redis => Dataset file ├── ... ├── serverless.yml => Lambda & Service configuration ├── src │ └── ... └── ...
第 3 步:将电影数据库数据集导入到您的应用程序中
文件 aws-redis-cloud-demo/movies-list-microservice/import_movies.redis 包含将电影插入到数据库中的所有 Redis 命令。 使用的命令是
要导入数据集,请打开一个终端并运行以下命令
> export REDISCLI_AUTH=<YOUR_DB_PASSWORD> > redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \ -p 18541 < movies-list-microservice/import_movies.redis
第 4 步:配置应用程序以使用您的 Redis Enterprise Cloud 实例
在测试应用程序之前,您必须使用您的 Redis Enterprise Cloud 数据库实例配置 Node.js 和 Python 服务。 打开这些文件
然后设置 Redis 主机、端口和密码:(REDIS_HOST、REDIS_PORT、REDIS_PASSWORD)
第 5 步: 构建并运行电影微服务 (Node.js)
按照此处列出的步骤来构建和运行项目。(您也可以在项目的 Readme 文件中找到所有信息。)
> npm install -g serverless
2. 转到 movies-list-microservice 目录
> cd movies-list-microservice
3. 安装依赖项
> npm install
4. 在本地运行 Lambda 函数
> npm start
5. 通过打开对 REST 服务的浏览器调用来测试该服务:http://localhost:3000/api/movies/1
6. 通过运行以下命令将函数部署到您的 AWS 环境来将该服务部署到 AWS
> serverless deploy ................................ Serverless: Stack update finished... Service Information service: movies-list-microservice stage: api region: us-east-1 stack: movies-list-microservice-api resources: 33 api keys: None endpoints: GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/search GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/group_by/{field} GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id} POST - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id} functions: listMovies: movies-list-microservice-api-listMovies searchMovies: movies-list-microservice-api-searchMovies getMovie: movies-list-microservice-api-getMovie saveMovie: movies-list-microservice-api-saveMovie layers: None
7. 通过将您的浏览器指向 https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/1 来测试 API
注意:如果您收到错误,请检查 AWS CloudWatch 中的函数日志以查看发生了什么。
更深入地了解代码
步骤 6: 构建并运行评论微服务 (Python)
以下是构建和运行项目的步骤。(您也可以在项目的 Readme 文件中找到所有信息。)
> cd movie-comments-microservice > python3 -m venv chalice-env > source chalice-env/bin/activate
2. 安装依赖项
> pip install -r requirements.txt
3. 设置 AWS 环境,运行以下命令,并配置您的 ID 和密钥
> aws configure AWS Access Key ID [None]: ****************ABCD AWS Secret Access Key [None]: ****************abCd Default region name [None]: us-west-2 Default output format [None]:
4. 将服务部署到 AWS,通过运行以下命令将函数部署到您的 AWS 环境
> chalice deploy Reusing existing deployment package. Updating policy for IAM role: movie-comments-microservice-dev Creating lambda function: movie-comments-microservice-dev Creating Rest API Resources deployed: - Lambda ARN: arn:aws:lambda:us-east-1:11111111111:function:movie-comments-microservice-dev - Rest API URL: https://XXXXXXX.execute-api.us-east-1.amazonaws.com/api/
更深入地了解代码
(可选)您可以将 Redis 数据库密码存储在 AWS Key Management Service 中。您可以在项目文档中找到配置步骤。
步骤 7:运行前端应用程序
> cd front-end > npm install
2. 编辑 .env.development 文件以设置电影和评论服务的 URL
VUE_APP_MOVIES_SERVICE=https://<xxx>.execute-api.<reg>.amazonaws.com/api VUE_APP_COMMENTS_SERVICE=https://<xxx>..execute-api.<reg>.amazonaws.com/api
3. 运行应用程序
> npm run serve
4. 打开浏览器,然后转到 http://localhost:8084
现在您可以在应用程序中导航、更新和搜索电影以及添加/删除评论。
(可选)您可以使用 S3 和 CloudFront 将 Vue 应用程序部署到您的 AWS 环境中,并将其公开提供给您的用户。这在项目文档中进行了解释。
使用 AWS Lambda 和 Redis Enterprise Cloud 可简化服务的部署。 将 Redis Enterprise Cloud 与 RediSearch 结合使用,您可以轻松地使用值查询 Redis 数据,从而使您可以将 Redis 用作服务的主要数据库。
Redis Enterprise Cloud 与 Redis 兼容,使您可以轻松迁移现有的 Redis 部署,包括 OSS 和托管服务。您只需要更改连接参数(例如数据库端点)。 有多种方法可以执行实时迁移,包括
除了 RediSearch 之外,Redis Enterprise Cloud 还允许您使用其他有前景的数据模型,例如 图、JSON、时间序列 和 Bloom 过滤器,并提供在生产环境中至关重要的各种其他数据库功能,包括 高可用性、可扩展性、持久性、安全性 和 主动-主动地理分布。
想要了解更多?查看我们的 AWS re:Invent 主页 并阅读这些教程和博客文章