您可以连接到亚马逊以外的Amazon Elasticache Redis吗?

时间:2014-02-20 19:29:49

标签: amazon-web-services amazon-ec2 redis amazon-elasticache

我可以从 EC2实例连接到VPC中的 Elasticache redis实例,但我想知道是否有办法连接到Elasticache Redis节点位于Amazon EC2实例之外,例如来自我的本地开发人员设置或其他供应商提供的VPS实例。

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

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

一段时间后我才会暂停。

9 个答案:

答案 0 :(得分:75)

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

ssh -f -N -L6379:<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。还要确保允许允许您使用的EC2节点的安全组连接到您的redis实例进入缓存安全组。

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

答案 1 :(得分:58)

不,你不能不诉诸“隧道”之类的“技巧”,这可能对测试没有用,但会消除使用超快速缓存带来额外延迟/开销的任何真正好处。

  

...在VPC内部或外部的 Amazon ElastiCache群集永远不会   允许从互联网访问

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

编辑2018:上面的答案在编写时是准确的,但是现在可以通过一些配置从外面使用方向从本页大约1/2的方向访问redis缓存:{{3 }}

答案 2 :(得分:19)

这些答案已过期。

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

  1. 在与缓存群集相同的VPC中创建NAT实例,但是在 公共子网。
  2. 为缓存群集创建安全组规则 NAT实例。
  3. 验证规则。
  4. 向NAT添加iptables规则 实例。
  5. 确认受信任的客户端能够连接到 簇。
  6. 保存iptables配置。
  7. 有关更详细的说明,请参阅aws指南:

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

答案 3 :(得分:5)

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

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

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

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Access.Outside.html

祝你好运!

答案 4 :(得分:4)

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

您在AWS以外的系统---&gt;互联网 - &gt;具有公共IP的HAProxy - &gt; Amazon Redis(Elasticache)

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

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

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

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

答案 5 :(得分:4)

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

添加端口转发

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

列出端口转发端口

C:\用户\管理员&GT; netsh interface portproxy show all

收听ipv4:连接到ipv4:

地址端口地址端口

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

删除端口转发

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

答案 6 :(得分:3)

这是一个可靠的节点脚本,可以为您完成所有脏工作。经测试并验证其有效。

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

如何使用   用法:uzys-elasticache-tunnel [options] [command]

命令:

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

用法示例

  • start - uzys-elasticache-tunnel start ./config.json
  • 停止 - uzys-elasticache-tunnel stop
  • status - uzys-elasticache-tunnel status

答案 7 :(得分: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

答案 8 :(得分:0)

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

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