105

我能够从EC2 实例连接到 VPC 中的ElastiCache Redis实例。但我想知道是否有办法连接到 Amazon EC2 实例之外的 ElastiCache Redis 节点,例如从我的本地开发设置或其他供应商提供的 VPS 实例。

目前从我的本地设置尝试时:

redis-cli -h my-node-endpoint -p 6379

我只是在一段时间后超时。

4

9 回答 9

110

SSH 端口转发应该可以解决问题。尝试从您的客户端运行它。

ssh -f -N -L 6379:<your redis node endpoint>:6379 <your EC2 node that you use to connect to redis>

然后从你的客户那里

redis-cli -h 127.0.0.1 -p 6379

这个对我有用。

请注意,redis 的默认端口6379不是6739. 并确保您允许用于连接到您的 redis 实例的 EC2 节点的安全组进入您的缓存安全组。

此外,AWS 现在支持在此处访问您的集群更多信息

于 2014-02-20T23:04:41.143 回答
78

2018 年更新

先前的答案在编写时是准确的,但是现在可以通过一些配置使用从外部 AWS 访问 ElastiCache 资源中的说明从外部访问 redis 缓存


旧答案

不,你不能不求助于诸如隧道之类的“技巧”,这对于测试来说可能是可以的,但会扼杀使用超高速缓存的任何真正好处,并增加延迟/开销。

VPC 内部使用 Amazon ElastiCache 与在外部使用它有何不同?:

不允许从 Internet 访问VPC 内部或外部的 Amazon ElastiCache 集群

但是,此语言已在当前常见问题解答中删除

于 2014-02-21T14:32:05.300 回答
28

这些答案已经过时了。

您可以按照以下步骤在 AWS 之外访问弹性缓存:

  1. 在与缓存集群相同的 VPC 中创建一个 NAT 实例,但在公有子网中。
  2. 为缓存集群和 NAT 实例创建安全组规则。
  3. 验证规则。
  4. 将 iptables 规则添加到 NAT 实例。
  5. 确认受信任的客户端能够连接到集群。
  6. 保存 iptables 配置。

有关更详细的描述,请参阅 aws 指南:

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws

于 2017-04-07T19:08:13.557 回答
6

不是那么老的问题,我自己遇到了同样的问题并解决了它:

有时,出于开发原因,您需要从外部访问(为了避免多次部署,可能只是为了简单的错误修复?)

亚马逊发布了一个使用 EC2 作为外部世界代理的新指南:

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws

祝你好运!

于 2015-11-23T08:42:51.563 回答
4

我们使用 HAProxy 作为保留的代理服务器。

您在 AWS 之外的系统 ---> Internet --> 具有公共 IP 的 HAProxy --> Amazon Redis (Elasticache)

请注意,这样做还有另一个很好的理由(当时)

由于我们使用不支持 Amazon DNS 故障转移的 node.js 客户端,因此客户端驱动程序不再支持 dns 查找。如果 redis 失败,客户端驱动程序将继续连接到旧的 master,它在故障转移后是 slave。

通过使用 HAProxy,它解决了这个问题。

现在使用最新的ioredis驱动,支持amazon dns failover。

于 2015-10-15T06:53:24.173 回答
4

顺便说一句,如果有人想要 Windows EC2 解决方案,请在 DOS 提示符下尝试这些(在所述 Windows EC2 机器上):

添加端口转发

C:\用户\管理员>netsh interface portproxy add v4tov4 listenport=6379 listenaddress=10.xxx.64.xxx connectport=6379 connectaddress=xxx.xxxxxx.ng.0001.use1.cache.amazonaws.com

列出端口转发的端口

C:\用户\管理员>netsh interface portproxy show all

在 ipv4 上收听:连接到 ipv4:

地址端口地址端口


10.xxx.128.xxx 6379 xxx.xxxxx.ng.0001.use1.cache.amazonaws.com 6379

删除端口转发

C:\用户\管理员>netsh interface portproxy delete v4tov4 listenport=6379 listenaddress=10.xxx.128.xxx

于 2016-07-11T18:41:36.970 回答
3

这是一个可靠的节点脚本,将为您完成所有繁琐的工作。测试并验证它有效。

https://www.npmjs.com/package/uzys-elasticache-tunnel

如何使用用法:uzys-elasticache-tunnel [选项] [命令]

命令:

start [filename]  start tunneling with configuration file (default: config.json)
stop              stop tunneling
status            show tunneling status

选项:

-h, --help     output usage information
-V, --version  output the version number

使用示例

  • 开始 - uzys-elasticache-tunnel start ./config.json
  • 停止 - uzys-elasticache-隧道停止
  • 状态 - uzys-elasticache-隧道状态
于 2016-03-03T20:56:09.500 回答
1

无法从 VPC 实例直接访问经典集群。解决方法是在经典实例上配置 NAT。

NAT 需要有一个简单的 tcp 代理

YourIP=1.2.3.4
YourPort=80
TargetIP=2.3.4.5
TargetPort=22

iptables -t nat -A PREROUTING --dst $YourIP -p tcp --dport $YourPort -j DNAT \
--to-destination $TargetIP:$TargetPort
iptables -t nat -A POSTROUTING -p tcp --dst $TargetIP --dport $TargetPort -j SNAT \
--to-source $YourIP
iptables -t nat -A OUTPUT --dst $YourIP -p tcp --dport $YourPort -j DNAT \
--to-destination $TargetIP:$TargetPort
于 2016-06-30T01:15:06.967 回答
0

我使用这个亚马逊文档解决了它说你必须在你的另一台 ec2 机器上安装 stunnel。

https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/

于 2019-05-08T06:37:50.350 回答