2016-03-15 2 views
5

Wie können Sie Ihren lokalen Django-Entwicklungsserver mithilfe von SSH-Tunneling glauben lassen, dass er in Ihrem AWS-Netzwerk ausgeführt wird?Verwenden Sie den SSH-Tunnel, damit der Django-Server denkt, er läuft in AWS?

Mein Szenario, ich bin eine lokale Django-Server heißt python manage.py runserver und Redis als Cache-Backend läuft (ElastiCache). Wenn meine App in der AWS-Umgebung ausgeführt wird, hat sie Zugriff auf Elasticache, aber lokal wird es nicht (und das ist eine gute Sache). Wenn ich aus irgendeinem Grund meine lokale Umgebung mit Elasticache testen möchte, muss ich irgendwie SSH-Tunneling verwenden, damit AWS denkt, dass es innerhalb des VPC-Netzwerks ausgeführt wird.

Ich habe versucht, dies funktioniert durch Verwendung von unten. Ich habe bestätigt, dass ich lokal mit SSH-Tunneling mit Redis Desktop Manager verbinden kann so 100% ich weiß, AWS unterstützt dies, mein Problem macht jetzt das gleiche mit Django.

Dies ist, was ich versucht habe:

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

Ich erhalte die Meldung „Fehler 60 zu verbinden“ angezeigt, wenn ich http://127.0.0.1:8000/ besuchen.

Was mache ich hier falsch?

Hinweise:

  • [email protected] ist nicht der Redis-Server, nur eine weitere EC2-Instanz auf AWS, die den Zugriff ElastiCache hat, dass ich als Tunnel verwenden möge.
  • Die mykey.pem hat Zugriff und die richtige Berechtigung.
  • Die ec2-Instanz verfügt über alle korrekten Berechtigungen und Ports für den Zugriff.
  • Getestet SSH-Tunneling mit Redis Desktop Manager und dies funktioniert für diese Software.
  • Elasticache und die EC2-Instanzen befinden sich alle in der gleichen Region und können miteinander verbunden werden.
+1

Warum versuchen Sie zu einer Produktions Redis Instanz zu verbinden? Können Sie nicht stattdessen eine lokale Instanz auf Ihrem Computer ausführen? Was Ihre Frage betrifft, so wollen Sie wahrscheinlich nicht '6379: localhost: 6379' verwenden, sondern stattdessen etwas wie' 6379: redis-servers.ip.address: 6379', aber das ist nur eine Vermutung. Verwenden Sie 'ssh -vv', um Tunnelprobleme zu debuggen, es wird eine Menge Dinge in stderr ausgeben. – koniiiik

+0

Ich glaube, Memcached auf AWS würde nur innerhalb des AWS-Netzwerks funktionieren. Ich versuchte ohne Glück, mich aus meiner Umgebung zu verbinden. Vergessen Sie nicht, die Elasticache-Ports in Ihren EC2-Sicherheitsgruppen zu öffnen. Außerdem verwende ich meine Django-Apps über AWS Elastc Beanstalk. – WayBehind

+0

@koniiiik Sie missverstehen, ich versuche nicht, Redis direkt zu verbinden, aber SSH-Tunneling (zu jeder EC2-Instanz) zu verwenden, um es so aussehen zu lassen, als ob meine lokale Umgebung innerhalb der VPC läuft. – Prometheus

Antwort

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

Diese Anfragen von Ihrem lokalen Rechner weiterleiten (an: 6379) zu localhost:6379 auf der EC2-Instanz. Dies ist nicht das, was Sie wollen (es sei denn, Sie haben redis lokal auf dem EC2-Instanz läuft)

Sie sollten die ElastiCache IP verwenden, anstatt

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

Richtig, ich verstehe, das schien zu funktionieren. Vielen Dank. – Prometheus

Verwandte Themen