原文链接:https://dzone.com/articles/getting-started-with-redis-on-aws-the-easy-way
作者:Abhishek Gupta
与大多数服务一样,Amazon MemoryDB for Redis 与 Amazon VPC 完全集成,并始终在 VPC 中启动集群,这意味着您无法从 VPC 外部访问它。在最初探索这些服务(MSK、Elasticache for Redis 等)时,我通常遵循涉及设置 EC2、SSH 进入实例、安装/复制内容(语言、运行时、代码、客户端等)的文档。 ,然后尝试了一些东西。
大多数情况下,第一步是最难的,对于开发人员来说,尽可能减少摩擦以“开始”是很重要的。我尝试寻找更简单的方法,发现 AWS Cloud9 非常有用,它快速、可预测,并且有一堆现成的有用工具。
在本博客中,我将提供有关如何使用Cloud9
轻松快速地开始(并继续试验/构建/开发)Amazon MemoryDB 的分步说明。
您无需在本地计算机上安装任何东西即可完成本教程。
您唯一需要的是一个 AWS 帐户。
设置 Cloud9 和 MemoryDB
如果您是 AWS 的新手(或 MemoryDB/任何其他服务),我建议您使用 AWS 控制台手动完成设置(而不是使用 CloudFormation 或其他工具)。这为您提供了可用选项的概述,并且在您尝试使用 AWS CLI、CDK、CloudFormation 等实现自动化时会很有帮助。
Cloud9 环境
这很简单:文档按预期工作。
转到 AWS 控制台 > Cloud9:
只需输入您的环境名称:
您可以在第二个屏幕上安全地选择默认值:
- 您将拥有一个带有 Amazon Linux 2 的
t2.micro
节点类型(1 GiB RAM + 1 vCPU),它将在 30 分钟后自动休眠(如果未使用)。 - 该实例将放置在默认 VPC(任何 AZ 中的任何子网)中。还将创建一个安全组。
现在这已经足够了。
在最后一页,检查您的设置,单击创建环境。
Redis 的内存数据库
同样,文档按预期工作。有一些配置旋钮,但我建议你保持简单:
- 单节点集群:选择 db.t4g.small 节点类型(目前就足够了)。
- 放置默认 vpc:您将在创建子网组(在 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 集群。
在终端:
SET hello world SET foo bar
复制
您应该从 MemoryDB 获得 OK 响应。
到目前为止,一切都很好!您可以使用标准工具 (redis-cli
) 连接新创建的 MemoryDB 集群。这对于完整性/连接性测试很有用,但您也可以进行一些“轻量级”开发并运行一些程序来在 MemoryDB 上执行操作。这是下一个合乎逻辑的步骤,所以让我们这样做。
下面的示例显示了一个 Go 程序,但您可以使用您选择的语言。毕竟,大多数语言运行时(如 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"}
复制
清理
完成后,不要忘记:
- 删除 MemoryDB 集群,
- Cloud9 环境
这就是这个博客的全部内容。我希望您能够遵循 MemoryDB 集群和 Cloud9 环境的设置(以及现成的 IDE 和终端!)。在 Docker 中使用 redis-cli 进行了一些初始连接测试之后,您还运行了一个测试程序来进行更多实验。
这一切只需要您的浏览器!
我希望这很有用,您可以将其重新用于您的特定设置、要求和编程语言。