dot Redis 8 来了——而且是开源的

了解更多

使用 AWS Lambda 和 Redis Enterprise Cloud 进行无服务器开发

在本博文中,您将学习如何集成 AWS LambdaRedis Enterprise Cloud。通过一个示例电影数据库应用程序,您将了解如何构建和部署两个 Lambda 函数,一个用 Node.js 编写,一个用 Python 编写。 这两个 Lambda 函数用于与 Redis 数据库交互,以插入、更新、删除和查询。该应用程序使用 RediSearch API,该 API 提供丰富的查询和搜索功能。无服务器,使用 AWS Lambda,符合微服务架构的日益增长的趋势,因为它允许开发人员将业务“服务”的范围缩小到一个可以使用他们选择的编程语言实现的小项目。要了解更多信息,请观看下面的视频,并继续阅读 AWS Lambda 的快速概述以及如何使用 Redis Enterprise Cloud 和 Lambda 构建应用程序的更深入的讲解

https://www.youtube.com/embed/UJHk1cTfs3g

快速了解 AWS Lambda

如果您还不熟悉 AWS Lambda,即该公司Serverless计算运行时,也称为函数即服务 (FaaS)——以下是您需要了解的基础知识。(Lambda 专家可以跳到下一节。)AWS Lambda 允许应用程序根据特定事件按需运行函数,使其成为构建事件驱动架构 (EDA) 应用程序的好方法。AWS Lambda 函数由 AWS 完全管理,可以使用各种 编程语言 创建。也许 AWS Lambda 最好的部分是,开发人员通常不需要完全理解应用程序生命周期就可以使用它。

可以使用几种不同的方法调用 AWS Lambda:直接从 AWS 控制台调用,使用来自其他 AWS 服务(如 SNSSQSKinesis)的事件调用,甚至从 AWS 控制台、CloudWatchS3 事件调用。在我们的示例电影数据库应用程序中,Lambda 函数将使用 HTTP REST 端点调用,这是使用 AWS API Gateway 完成的。 (您可以在 文档中找到有关 AWS Lambda 函数调用的更多信息。)

AWS Lambda HTTP 执行过程

具体来说,通过 HTTP 的请求被路由到 AWS 的 API Gateway 管理工具,该工具解析正文、标头和参数,然后使用此有效负载触发我们的 Lambda 函数

在 API Gateway 中公开 AWS Lambda 函数。

作为开发人员,您只需编写代码来公开 REST 端点,并配置部署以在 AWS API Gateway 中公开它。(我们将在下一节讨论示例电影数据库应用程序时进一步讨论这一点。)

无服务器应用程序中的状态和数据管理

AWS Lambda 是一个无状态环境。但是,在许多应用程序中,您仍然希望在服务或调用之间共享状态,而 Redis 可以提供帮助。对于简单的状态管理,AWS 开发人员通常使用 ElastiCache,但许多应用程序需要的不仅仅是状态管理,他们还需要持久性、丰富的数据、高性能和查询模型。Redis Enterprise Cloud 在 AWS 上提供完全托管的服务(也支持 Google Cloud 和 Microsoft Azure)。

Redis 电影数据库示例应用程序

现在我们准备好查看我们的示例电影数据库应用程序,以了解使用 Redis Enterprise Cloud 和 AWS Lambda 构建应用程序的关键步骤。

该应用程序使用 RediSearch Getting Started 教程中记录的数据集,该数据集由一个电影目录组成,由 Redis 哈希组成。 如下图所示,前端是使用 Vue.js 构建的,它调用 REST 端点来

  • 列出、排序和过滤电影
  • 编辑电影并添加/删除评论
  • 使用全文搜索和分面搜索搜索电影
使用 AWS Lambda 函数的示例电影数据库应用程序的演示。

如上所述,该应用程序利用 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”添加到数据库。

我们的示例电影数据库应用程序的 Redis Enterprise Cloud 数据库信息。

您将需要以下属性才能将 Lambda 函数连接到您的 Redis 数据库

  • REDIS_HOST: redis-18541.xxx.xxxx.xxx.cloud.redis.com
  • REDIS_PORT: 18541
  • REDIS_PASSWORD : <屏幕上显示的密码>

第 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 命令。 使用的命令是

  • HSET 用于每部电影
  • FT.CREATE 用于创建 RediSearch 索引。

要导入数据集,请打开一个终端并运行以下命令

> 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 服务。 打开这些文件

  • ./movies-list-microservice/serverless.yml
  • ./movie-comments-microservice/.chalice/config.json

然后设置 Redis 主机、端口和密码:(REDIS_HOST、REDIS_PORT、REDIS_PASSWORD

第 5 步: 构建并运行电影微服务 (Node.js)

按照此处列出的步骤来构建和运行项目。(您也可以在项目的 Readme 文件中找到所有信息。)

  1. 安装 serverless 框架
> 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 中的函数日志以查看发生了什么。

更深入地了解代码

  • package.json 文件包含此 Node.js 项目使用的依赖项。 这个项目非常简单,并使用以下依赖项
    • 使用 redisredis-redisearch 库连接 Redis 并暴露 RediSearch 命令。
    • 使用 aws-lambda 库调用所有 AWS Lambda 函数,以便将 Node 应用程序部署到您的 AWS 环境中。
  • serverless.yml 文件定义了将 HTTP 操作映射到将被调用的 JavaScript 函数(在 handler.ts 中定义)的无服务器函数,并包含环境变量(在本演示中主要是 Redis 连接字符串)。
  • handler.ts 文件是一个类,用于捕获来自 AWS Gateway 的事件并调用应用程序库 SearchService,该库负责执行对 Redis 数据库的所有调用。
  • SearchService.ts 文件包含与 Redis 数据库交互并使用 Redis 和 RediSearch API 的所有方法:client.ft_search()、 client.aggregate()client.hmset() 等。(您可以在 Redis UniversityGitHub 上的 RediSearch 2.0 入门教程中了解有关 Redis 和 RediSearch 命令的更多信息。)

步骤 6: 构建并运行评论微服务 (Python)

以下是构建和运行项目的步骤。(您也可以在项目的 Readme 文件中找到所有信息。)

  1. 移动到 Python 项目并创建一个虚拟环境
> 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/

更深入地了解代码

  • requirements.txt 文件包含此 Python 项目使用的依赖项。 此项目非常简单,并使用以下依赖项
    • Chalice 是用于在 Python 中创建无服务器应用程序的 AWS 框架
    • redisredisearch 访问 Redis 并使用 RediSearch API
  • config.json 文件定义了无服务器应用程序,并用于定义环境变量 - 在此应用程序中,为 Redis 数据库连接信息。
  • app.py 文件是应用程序入口点,它使用各种路由定义了所有 REST 端点。该应用程序导入各种依赖项,尤其是用于与 Redis 交互的 CommentService。 如果想使用多个文件,必须将这些文件放在 chalicelib 文件夹中。
  • comment_service.py 文件包含与 Redis 的所有交互,用于创建、查询和删除评论。评论功能的一个有趣点是 search() 方法。此方法用于检索电影的评论,并使用 search_client.search() 调用按创建日期排序。

(可选)您可以将 Redis 数据库密码存储在 AWS Key Management Service 中。您可以在项目文档中找到配置步骤。

步骤 7:运行前端应用程序

  1. 转到前端目录并安装依赖项
> 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 主页 并阅读这些教程和博客文章