在本模块中,您将使用 Redis 引擎启动 Amazon ElastiCache 集群,然后在应用程序代码中测试与实例的连接。

Amazon ElastiCache 是一项完全托管的服务,可在应用程序中使用内存中的数据存储。ElastiCache 提供了两个引擎可供选择(RedisMemcached),并能够处理所有预置、故障转移、备份等操作。如果用户需要在应用程序中快速、大量访问数据,可以使用 ElastiCache。

在接下来的步骤中,您将使用 Redis 引擎启动 Amazon ElastiCache 集群。然后,对集群进行配置,以便从 Cloud9 开发环境访问它。最后,通过与应用程序代码连接来测试这一连接。

完成模块所需时间:20 分钟


  • 第 1 步:启动 Amazon ElastiCache 集群

    首先,启动 Amazon ElastiCache for Redis 集群。

    进入 AWS 管理控制台的 ElastiCache 部分,然后选择立即开始,启动实例创建向导。

    对于集群引擎,选择 Redis

    Redis 设置部分,在名称中输入 leaderboard。然后,选择节点类型,打开节点类型选择模式。选择 t2,然后选择 cache.t2.micro。这是最小的实例。对于生产应用程序可能需要更大型的实例,不过本示例中此实例比较合适。

    leaderboard-ec-node-type

    (单击可放大)

    leaderboard-ec-node-type

    副本数量中输入 0。ElastiCache 副本提供了一种完全托管的方式,通过将数据复制到其他实例来扩展可以处理的读取数量。它通常是生产应用程序的理想之选,但在本教程中用不到。

    基本设置应如下所示。

    leaderboard-ec-settings

    (单击可放大)

    leaderboard-ec-settings

    高级设置部分,在 VPC 中新建一个子网组。子网是联网地址空间的一部分。子网可以将网络分成更小的部分,从而更高效地对网络进行寻址。子网组是子网的集合,用于选择启动 ElastiCache 实例的位置。

    请为子网组指定一个 leaderboard-redis 名称,并至少选择一个子网,将其添加到子网组中。该子网使用您的 AWS 账户提供的默认 VPC。

    leaderboard-ec-advanced-settings

    (单击可放大)

    leaderboard-ec-advanced-settings

    其余设置请保留默认设置,然后选择创建

    leaderboard-ec-maintenance

    (单击可放大)

    leaderboard-ec-maintenance

    成功! 此时,您应该会在 ElastiCache 控制面板中看到 ElastiCache 集群处于 creating 状态。 

  • 第 2 步:为 AWS Lambda 函数创建安全组

    ElastiCache 集群启动时,可以为 Lambda 函数创建一个安全组。

    AWS Lambda 是一项无服务器计算服务,您可以在其中上传发生特定事件时所执行的代码。您不必担心服务器预置或管理,系统会完全代您执行代码。

    现在,您需要为 Lambda 函数创建一个安全组,以便它可以访问 ElastiCache 实例。

    在 AWS 管理控制台的 EC2 部分,导航至安全组,并选择创建安全组

    leaderboard-sg

    (单击可放大)

    leaderboard-sg

    安全组名称中输入 leaderboard-lambda。在描述中输入 Security group for Leaderboard Tutorial。该安全组应位于您的默认 VPC 中,即在其中启动 ElastiCache 实例的 VPC。

    选择创建来创建安全组。

    leaderboard-sg-settings

    (单击可放大)

    leaderboard-sg-settings

    安全组列表中,找到 leaderboard-lambda 组并复制安全组 ID(该 ID 以 sg- 开头)。

    然后,在 Cloud9 终端运行以下命令。

    (确保在运行命令时,将<securityGroupId> 替换为您的安全组 ID。)

    echo "export SECURITY_GROUP_ID=<securityGroupId>" >> env.sh && source env.sh
  • 第 3 步:配置对 ElastiCache 集群的访问

    在创建 ElastiCache 实例和 Lambda 安全组后,您需要对 ElastiCache 进行配置,以便 Cloud9 开发环境和 Lambda 函数可以访问它。

    必须在 VPC 的私有子网中预置 Amazon ElastiCache 实例。它们不接收公有 IP 地址,也无法通过公共 Internet 进行访问。要访问 ElastiCache 实例,您需要从某些在 VPC 内具有访问权限的计算资源(例如 EC2 实例或 Lambda 函数)进行访问。

    导航至 AWS 管理控制台中的 ElastiCache 控制面板,查看 ElastiCache 实例。展开实例详细信息,找到 ElastiCache 实例的安全组。

    leaderboard-ec-details

    (单击可放大)

    leaderboard-ec-details

    然后,进入 AWS 管理控制台的 EC2 部分,找到安全组。将 ElastiCache 安全组的值粘贴到筛选条件中,查找该安全组。

    leaderboard-ec-sg-search

    (单击可放大)

    leaderboard-ec-sg-search

    选择该安全组,打开它的配置。选择入站选项卡,然后选择编辑

    您需要为安全组创建两个规则:一个可以让 Cloud9 实例访问 Redis 实例,一个可以让 Lambda 函数访问 Redis 实例。

    leaderboard-ec-sg-inbound

    (单击可放大)

    leaderboard-ec-sg-inbound

    首先,添加一个端口范围6379 的规则,这个端口是 Redis 默认使用的端口。在资源部分,输入 cloud9。您会看到一个以 aws-cloud9-Puzzle-Leaderboard 开头的选项。.选择该选项,以允许来自 Cloud9 实例的流量。最后,为规则添加描述,以免忘记该规则的用途。

    然后,为 Lambda 函数添加一个端口范围6379 的类似规则。在资源部分,输入 leaderboard-lambda 来搜索您的组。选择安全组。

    添加完两个规则后,选择保存

    leaderboard-ec-inbound-rules

    (单击可放大)

    leaderboard-ec-inbound-rules

    现在,Cloud9 实例应该可以访问 ElastiCache 实例了。在下一步中,您会在应用程序代码中对该访问进行测试。 

  • 第 4 步:测试对 ElastiCache 集群的访问

    在本模块的最后一步,测试是否可以连接到 ElastiCache 实例。

    导航至 AWS 管理控制台中的 ElastiCache 控制面板,查看 ElastiCache 实例。展开实例详细信息,找到主终端节点属性。

    将该值复制到剪贴板。

    leaderboard-ec-endpoint

    (单击可放大)

    leaderboard-ec-endpoint

    在终端运行以下命令,将该值导出,作为 Cloud9 实例中的环境变量。

    注意:确保将 <yourRedisEndpoint> 替换为 Redis 实例主终端节点的值。

    echo "export REDIS_ENDPOINT=<yourRedisEndpoint>" >> env.sh && source env.sh

    配置完成后,您就可以尝试连接到终端节点了。scripts/ 目录中有一个 testRedis.js 文件。该文件的内容如下:

    const redis = require('redis')
    const client = redis.createClient({
      url: `redis://${process.env.REDIS_ENDPOINT}`
    })
    
    client.on('error', function(err) {
      console.log('Received Redis error:', err)
    })
    
    client.ping((err, resp) => {
      if (err) {
        console.log('Error doing ping: ', err);
      } else {
        console.log('Successful ping!', resp)
      }
      client.quit()
    

    该代码初始化 Redis 实例的连接。然后,它运行一个简单的 PING 命令,以确保连接有效。

    运行以下命令来执行此脚本:

    node scripts/testRedis.js

    您应该能在终端中看到以下输出:

    Successful ping! PONG

    如果收到 Redis 服务器的 PONG 响应,则表明可以连接到 ElastiCache Redis 实例。


在本模块中,您启动了 ElastiCache for Redis 集群。然后,在 Redis 实例上配置了安全组,以便可以从 Cloud9 开发环境访问它。最后,连接 Redis 实例,对配置进行测试。

在下一模块中,您将学习如何设计在 Redis 实例中用于处理总体排行榜的数据模型。