我能够从EC2 实例连接到 VPC 中的ElastiCache Redis实例。但我想知道是否有办法连接到 Amazon EC2 实例之外的 ElastiCache Redis 节点,例如从我的本地开发设置或其他供应商提供的 VPS 实例。
目前从我的本地设置尝试时:
redis-cli -h my-node-endpoint -p 6379
我只是在一段时间后超时。
我能够从EC2 实例连接到 VPC 中的ElastiCache Redis实例。但我想知道是否有办法连接到 Amazon EC2 实例之外的 ElastiCache Redis 节点,例如从我的本地开发设置或其他供应商提供的 VPS 实例。
目前从我的本地设置尝试时:
redis-cli -h my-node-endpoint -p 6379
我只是在一段时间后超时。
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 现在支持在此处访问您的集群更多信息
先前的答案在编写时是准确的,但是现在可以通过一些配置使用从外部 AWS 访问 ElastiCache 资源中的说明从外部访问 redis 缓存
不,你不能不求助于诸如隧道之类的“技巧”,这对于测试来说可能是可以的,但会扼杀使用超高速缓存的任何真正好处,并增加延迟/开销。
在VPC 内部使用 Amazon ElastiCache 与在外部使用它有何不同?:
不允许从 Internet 访问VPC 内部或外部的 Amazon ElastiCache 集群
但是,此语言已在当前常见问题解答中删除
这些答案已经过时了。
您可以按照以下步骤在 AWS 之外访问弹性缓存:
有关更详细的描述,请参阅 aws 指南:
不是那么老的问题,我自己遇到了同样的问题并解决了它:
有时,出于开发原因,您需要从外部访问(为了避免多次部署,可能只是为了简单的错误修复?)
亚马逊发布了一个使用 EC2 作为外部世界代理的新指南:
祝你好运!
我们使用 HAProxy 作为保留的代理服务器。
您在 AWS 之外的系统 ---> Internet --> 具有公共 IP 的 HAProxy --> Amazon Redis (Elasticache)
请注意,这样做还有另一个很好的理由(当时)
由于我们使用不支持 Amazon DNS 故障转移的 node.js 客户端,因此客户端驱动程序不再支持 dns 查找。如果 redis 失败,客户端驱动程序将继续连接到旧的 master,它在故障转移后是 slave。
通过使用 HAProxy,它解决了这个问题。
现在使用最新的ioredis驱动,支持amazon dns failover。
顺便说一句,如果有人想要 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
这是一个可靠的节点脚本,将为您完成所有繁琐的工作。测试并验证它有效。
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
使用示例
无法从 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
我使用这个亚马逊文档解决了它说你必须在你的另一台 ec2 机器上安装 stunnel。
https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/