您可以在Amazon外部连接到AmazonElastiСacheRedis吗?


90

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

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

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

过了一段时间我才超时。

Answers:


75

不,您不能不借助诸如隧道之类的“技巧”,虽然可以通过测试来解决问题,但是将杀死使用超快速缓存并增加延迟/开销的任何真正好处。

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

从这里:http : //aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDIT 2018:上面的答案在写时是准确的,但是现在可以通过一些配置来使用此页面下约1/2的方式从外部访问redis缓存:https ://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
还是这样吗?文档不再这么说-他们声称redis受标准安全组策略支配,但是尽管如此,我仍然无法访问我的redis节点。罢工。参考文献刚刚移动:部署在VPC中的Amazon ElastiCache节点永远无法从Internet或VPC外部的EC2实例访问。
metalaureate

7
我觉得“杀手”有点强大。例如,在AWS之外(通过这样的隧道)运行我们的应用程序时,我们不会受到明显的性能影响。与数据库操作,浏览器负载,磁盘I / O等相比,隧道的开销微不足道。
2016年


94

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节点的安全组允许到Cache安全组中。

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


感谢您指出端口,只是一个错字。那么,您是说通过EC2进行SSH隧道传输是访问Amazon外部的Elasticache节点的唯一方法吗?谢谢,
Loic Duros 2014年

就像其他答案中提到的@EJBrennan一样,这是正确的。
Rico

我们如何撤销ssh端口转发...?
Muthukumar K,

您可以终止ssh进程。在Linux上: kill -9 <pid>
Rico

27

这些答案已过期。

您可以按照以下步骤在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


我不需要NAT实例,我想检查一下。里科的答案正是我想要的。
Pysis

6

不是一个老问题,我自己遇到了一个问题并解决了:

有时,出于开发原因,您需要从外部进行访问(为避免仅由于简单的错误修复而进行的多次部署?)

亚马逊已经发布了一个新指南,该指南使用EC2作为外界的代理:

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

祝好运!


3
作为参考,亚马逊提到的方法是NAT实例。
russellpierce

仅供参考,来自文档:“此方法应仅用于测试和开发目的。不建议将其用于生产”
jasonjonesutah

1
是的,这是真的@jasonjonesutah,我在回答中也提到了这一点。对于生产而言这是一个非常糟糕的主意,但是对于开发而言却是出色的。
谢伊·艾尔卡亚姆

4

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

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

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

由于我们使用不支持Amazon DNS故障转移的node.js客户端,因此客户端驱动程序不支持dns再次查找。如果redis失败,则客户端驱动程序将继续连接到旧的主服务器,该主服务器在故障转移后为从服务器。

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

现在使用最新的ioredis驱动程序,它支持Amazon dns故障转移。


1
更新node.js,现在ioredis支持DNS故障转移。如果使用DNS主机名,则可以在没有HAProxy的情况下进行自动故障转移。
teddychan '16

4

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

添加端口转发

C:\ Users \ Administrator>netsh interface portproxy add v4tov4 listenport=6379 listenaddress=10.xxx.64.xxx connectport=6379 connectaddress=xxx.xxxxxx.ng.0001.use1.cache.amazonaws.com

列出端口转发的端口

C:\ Users \ Administrator>netsh interface portproxy show all

在ipv4上收听:连接到ipv4:

地址端口地址端口


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

删除端口转发

C:\ Users \ Administrator>netsh interface portproxy delete v4tov4 listenport=6379 listenaddress=10.xxx.128.xxx


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开始./config.json
  • 停止-uzys-elasticache-tunnel停止
  • 状态-uzys-elasticache隧道状态

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

您在以下提到的帖子中也给出了相同的答案,但有不同的要求。在给定的情况下它又如何工作?stackoverflow.com/questions/38066908/…–
abby37

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.