2016-03-15 64 views
5

如何使您的本地Django开发服务器认为它使用SSH隧道在您的AWS网络中运行?使用SSH隧道使Django服务器认为它在AWS内运行?

我的方案,我运行一个本地的Django服务器即python manage.py runserver和Redis的作为缓存后端(Elasticache)。当我的应用程序在AWS环境中运行时,它可以访问Elasticache,但在本地它不会(这是件好事)。如果由于某种原因,我想用Elasticache测试我的本地环境,我需要以某种方式使用SSH隧道使AWS认为它在VPC网络内运行。

我试图通过使用下面得到这个工作。我已经确认我可以使用SSH隧道方式与Redis Desktop Manager进行本地连接,所以我知道AWS有100%的支持,我的问题现在和Django一样。

这是我已经试过:

> python manage.py runserver 8000 
> ssh -i mykey.pem [email protected] -L 6379:localhost:6379 

我得到的消息“错误60连接到”的消息时,我访问http://127.0.0.1:8000/

我在做什么错在这里?

注:

  • [email protected]不是Redis的服务器,只需在AWS上另一 EC2实例可以访问Elasticache,我想作为一个 隧道使用。
  • mykey.pem有访问权限和正确的权限。
  • ec2实例具有所有访问权限和端口。
  • 测试SSH隧道与Redis Desktop Manager和这适用于 该软件。
  • Elasticache和EC2实例都在相同的区域并可以相互连接。
+1

为什么你试图连接到生产的Redis实例?你不能只在你的机器上运行本地实例吗?至于你的问题,你可能不想使用'6379:localhost:6379',而是使用'6379:redis-servers.ip.address:6379',但这只是一个猜测。使用'ssh -vv'来调试隧道问题,它会打印出一堆东西给stderr。 – koniiiik

+0

我认为AWS上的memcached只能在AWS网络中使用。我尝试没有运气,从我的地方环境连接。 BTW不要忘记打开EC2安全组中的Elasticache端口。另外我还通过AWS Elastc Beanstalk运行我的Django应用程序。 – WayBehind

+0

@koniiiik您误解了,我没有尝试直接连接Redis,但想要使用SSH隧道(对任何EC2实例)使其看起来像我的本地环境在VPC内部运行。 – Prometheus

回答

3
ssh -i mykey.pem [email protected] -L 6379:localhost:6379 

这会将从本地计算机(上:6379)请求localhost:6379的EC2实例。这是不是你想要的(除非您已在Redis的EC2实例在本地运行)

您应该使用Elasticache IP而不是

ssh -i mykey.pem [email protected] -L 6379:<elasticache-ip>:6379 
+0

对,我明白了,这似乎工作。谢谢。 – Prometheus