与大多数服务一样,Amazon MemoryDB for Redis与亚马逊专有网络完全集成,始终在专有网络中启动您的集群。这意味着您无法从专有网络外部访问它。在最初探索这些服务(MSK、用于Redis的Elasticache等)时,我通常会遵循相关文档,包括设置EC2、SSH到实例、安装/复制内容(语言、运行时、代码、客户端等),然后进行尝试。
大多数情况下,第一步是最难的,对于开发人员来说,尽可能减少摩擦以“开始”是很重要的我寻找了更简单的方法,发现AWS Cloud9非常有用。它快速、可预测,并且有一系列有用的工具随时可用。
在本博客中,我将逐步介绍如何使用Cloud9轻松快速地开始(并继续实验/构建/开发)Amazon MemoryDB。
您无需在本地机器上安装任何东西即可完成本教程。
你唯一需要的是一个AWS帐户,因此,请确保您有一个(即使是免费层也可能工作)。
设置Cloud9和MemoryDB
如果您一般不熟悉AWS(或MemoryDB/任何其他服务),我建议您使用AWS控制台手动完成设置(而不是使用CloudFormation或其他工具)。这为您提供了可用选项的概述,当您尝试使用AWS CLI、CDK、CloudFormation等实现自动化时,这将非常有用。
Cloud9环境
这很简单:文档按预期工作。
转到AWS控制台>Cloud9:

只需输入环境的名称:

您可以在第二个屏幕上安全地选择默认值:
-
你将有一个t2.微节点类型(1 GiB RAM+1 vCPU),带有Amazon Linux 2,30分钟后自动休眠(如果不使用)。
-
实例将被放置在默认的专有网络中(任何AZ中的任何子网)。还将创建一个安全组。
这就足够了。
在最后一页,查看您的设置,单击创建环境。

Redis的MemoryDB
同样,文档按预期工作。有几个配置旋钮,但我建议您保持简单:
-
单节点集群:选择db。t4g。小节点类型(现在就足够了)。
-
放置默认专有网络:在创建子网组(在MemoryDB中)时,您将选择该专有网络(以及子网)。
-
还要确保设置ACL和凭据(连接到MemoryDB的用户名和密码)。
请耐心等待,集群应该在几分钟内准备好。

安全配置
您需要添加配置,以允许从Cloud9实例访问MemoryDB集群。
首先,复制Cloud9实例的安全组ID:

然后,打开MemoryDB集群的安全组:

添加入站安全规则:

该规则表示允许与源安全组(本例中为Cloud9)关联的实例访问与目标安全组(本例中为MemoryDB)关联的实例的TCP端口6379。
配置完毕!
导航到Cloud9 IDE
转到AWS控制台>Cloud9:

你的Cloud9环境应该打开-你应该看到一个终端。
轻松连接MemoryDB
最简单的方法是使用redis cli。您不需要单独安装。我们就用Docker吧,因为它已经为我们预先安装好了!
redis cli在redis容器本身中可用,因此您可以从那里启动并使用它。从DockerHub Docker Pull Redis中拉出Redis Docker图像。
Admin:~/environment $ docker pull redis
Using default tag: latest
latest: Pulling from library/redis
214ca5fb9032: Pull complete
9eeabf2ad250: Pull complete
b8eb79a9f3c4: Pull complete
0ba9bf1b547e: Pull complete
2d2e2b28e876: Pull complete
3e45fcdfb831: Pull complete
Digest: sha256:180582894be9a7d5f1201877744b912945a8f9a793a65cd66dc1af5ec3fff0fc
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
运行容器:
Admin:~/environment $ docker run --rm -it redis /bin/bash
root@429f8fabaf09:/data#
现在,您在终端(Cloud9 IDE)的终端(在容器中)内。
复制MemoryDB集群的集群端点,并将其设置为环境变量:

确保从群集端点删除端口(:6379),因为redis-cli会自动附加:
export MEMORYDB_CLUSTER_ENDPOINT=<memorydb cluster endpoint without the :6379 part)
redis-cli -c --user <memorydb username> --askpass -h $MEMORYDB_CLUSTER_ENDPOINT --tls --insecure
–askpass将提示您输入密码。

哇!现在,您已从Cloud9实例中的Docker容器中连接到MemoryDB集群。
是时候跳传统的hello world舞蹈了!
在终端中:
SET hello world
SET foo bar
你应该会从MemoryDB得到一个OK的回复。
到现在为止,一直都还不错!您可以使用标准工具(redis cli)连接到新创建的MemoryDB集群。这有利于健全性/连接性测试,但您也可以进行一些“轻量级”开发,并运行一些程序在MemoryDB上执行操作。这是下一个合乎逻辑的步骤,让我们这样做。
下面的示例显示了一个围棋程序,但您可以使用自己选择的语言。毕竟,大多数语言运行时(如Java、Python、Node.js、Go等)都是预安装在Cloud9环境中的!

运行程序以连接MemoryDB
代码在GitHub上,因此只需克隆它并将其更改到正确的文件夹:
git clone https://github.com/abhirockzz/memorydb-cloud9-quickstart
cd memorydb-cloud9-quickstart
设置环境变量并运行程序!
export MEMORYDB_CLUSTER_ENDPOINT=<memorydb cluster endpoint (with the port)>
export MEMORYDB_USERNAME=<memorydb username>
export MEMORYDB_PASSWORD=<memorydb password>
go run main.go
这是我运行它时的输出:
Admin:~/environment/memorydb-cloud9-quickstart (master) $ go run main.go
go: downloading github.com/go-redis/redis/v8 v8.11.5
go: downloading github.com/gorilla/mux v1.8.0
go: downloading github.com/cespare/xxhash/v2 v2.1.2
go: downloading github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
2022/05/12 04:53:46 connecting to cluster ****************(redacted)
2022/05/12 04:53:46 successfully connected to cluster
2022/05/12 04:53:46 started HTTP server....
这将启动一个公开几个端点的HTTP服务器。让我们试试。
在Cloud9中打开一个单独的终端来运行下面的命令。
首先,查看集群信息:
curl -i http://localhost:8080/
HTTP/1.1 200 OK
Date: Thu, 12 May 2022 04:57:03 GMT
Content-Length: 354
Content-Type: text/plain; charset=utf-8
[{"Start":0,"End":16383,"Nodes":[{"ID":"3a0ef99406d4165fab450fde6c0a4eac3ee8f215","Addr":"****************.amazonaws.com:6379"},{"ID":"2b5a4663a9183f7921517c6f14195e9d26a6ca79","Addr":"****************.amazonaws.com:6379"}]}]
我们得到了关于集群中碎片以及单个节点的信息。你的情况会有所不同。
还记得我们以前用redis cli执行过SET hello world吗?现在让我们获得该值:
# get the value for the key "hello"
Admin:~/environment $ curl -i localhost:8080/hello
HTTP/1.1 200 OK
Date: Thu, 12 May 2022 04:54:45 GMT
Content-Length: 32
Content-Type: text/plain; charset=utf-8
{"Key":"hello","Value":"world"}
对键foo执行相同的操作:
Admin:~/environment $ curl -i localhost:8080/foo
HTTP/1.1 200 OK
Date: Thu, 12 May 2022 04:55:44 GMT
Content-Length: 28
Content-Type: text/plain; charset=utf-8
{"Key":"foo","Value":"bar"}
它按照预期工作。那一个不存在的密钥呢?
Admin:~/environment $ curl -i localhost:8080/notthere
HTTP/1.1 404 Not Found
Date: Thu, 12 May 2022 04:56:23 GMT
Content-Length: 0
HTTP 404:很公平。最后,您可以设置自己的键值:
Admin:~/environment $ curl -i -X POST -d 'redis' localhost:8080/awsome
HTTP/1.1 200 OK
Date: Thu, 12 May 2022 04:59:25 GMT
Content-Length: 0
Admin:~/environment $ curl -i localhost:8080/awsome
HTTP/1.1 200 OK
Date: Thu, 12 May 2022 05:00:51 GMT
Content-Length: 33
Content-Type: text/plain; charset=utf-8
{"Key":"awsome","Value":"redis"}
示例应用程序的Dockerfile也存在于Github repo中,以防您想要构建docker映像并运行它。
清理
完成后,不要忘记:
删除MemoryDB集群,
Cloud9环境
这就是这个博客的全部内容。我希望您能够遵循MemoryDB集群和Cloud9环境(以及现成的IDE和终端!)的设置。在Docker中使用redis cli进行了一些初始连接测试之后,您还运行了一个测试程序来进行更多的实验。
清理
完成后,不要忘记:
-
删除MemoryDB集群,
-
Cloud9环境
这就是这个博客的全部内容。我希望您能够遵循MemoryDB集群和Cloud9环境(以及现成的IDE和终端!)的设置。在Docker中使用redis cli进行了一些初始连接测试之后,您还运行了一个测试程序来进行更多的实验。
这一切只需要你的浏览器!
我希望这是有用的,您可以将其重新用于特定的设置、需求和编程语言。
快乐的编码吧!
原文标题:Getting Started With Redis on AWS the Easy Way
原文作者: Abhishek Gupta
原文链接:https://dzone.com/articles/getting-started-with-redis-on-aws-the-easy-way




