Czy możesz połączyć się z Amazon ElastiСache Redis poza Amazon?


90

Mogę połączyć się z instancją ElastiCache Redis w VPC z instancji EC2 . Ale chciałbym wiedzieć, czy istnieje sposób na połączenie się z węzłem ElastiCache Redis poza instancjami Amazon EC2, na przykład z mojej lokalnej konfiguracji deweloperskiej lub instancji VPS dostarczonych przez innych dostawców.

Obecnie podczas próby z mojej lokalnej konfiguracji:

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

Po jakimś czasie mam przerwę.

Odpowiedzi:


75

Nie, nie możesz bez uciekania się do „sztuczek”, takich jak tunel, który może być odpowiedni do testowania, ale zabije wszelkie realne korzyści z używania superszybkiej pamięci podręcznej z dodatkowym opóźnieniem / narzutem.

... do klastra Amazon ElastiCache, wewnątrz lub na zewnątrz VPC, nigdy nie można uzyskać dostępu z Internetu .

Stąd: http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDYTUJ 2018: Powyższa odpowiedź była dokładna, gdy została napisana, jednak teraz można uzyskać dostęp do pamięci podręcznej redis z zewnątrz, korzystając ze wskazówek znajdujących się mniej więcej w połowie tej strony: https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
Czy nadal tak jest? Doktorzy już tego nie mówią - twierdzą, że redis podlega standardowym zasadom grup bezpieczeństwa, ale mimo to nadal nie mogę uzyskać dostępu do mojego węzła redis. Uderz w to. Właśnie przeniesiono: Węzły Amazon ElastiCache, wdrożone w VPC, nigdy nie są dostępne z Internetu ani z instancji EC2 poza VPC.
metalaureate

7
Czuję, że „zabijanie” jest trochę mocne. Na przykład nie uzyskujemy znaczącego spadku wydajności podczas uruchamiania naszych aplikacji poza AWS (przez taki tunel). Narzuty tunelu są niewielkie w porównaniu z operacjami DB, obciążeniem przeglądarki, operacjami wejścia / wyjścia dysku i tak dalej.
sming


94

Przekierowanie portów SSH powinno załatwić sprawę. Spróbuj uruchomić to na swoim kliencie.

ssh -f -N -L 6379:<your redis node endpoint>:6379 <your EC2 node that you use to connect to redis>

Następnie od twojego klienta

redis-cli -h 127.0.0.1 -p 6379

Mi to pasuje.

Należy pamiętać, że domyślny port dla Redis 6379nie jest 6739. Upewnij się również, że zezwalasz grupie zabezpieczeń węzła EC2, którego używasz, na łączenie się z instancją redis z grupą zabezpieczeń Pamięć podręczna.

Ponadto AWS obsługuje teraz dostęp do klastra więcej informacji tutaj


Dzięki za wskazanie portu, tylko literówka. Więc, czy chcesz powiedzieć, że tunelowanie SSH przez EC2 to jedyny sposób na uzyskanie dostępu do węzła elastycznego poza Amazon? Dzięki,
Loic Duros,

To prawda, tak jak @EJBrennan wspomniany w innej odpowiedzi.
Rico,

Jak możemy cofnąć przekierowanie portów ssh ...?
Muthukumar K

możesz zabić proces ssh. W systemie Linux: kill -9 <pid>
Rico

27

Te odpowiedzi są nieaktualne.

Możesz uzyskać dostęp do elastycznej pamięci podręcznej poza AWS, wykonując następujące kroki:

  1. Utwórz instancję NAT w tej samej sieci VPC co klaster pamięci podręcznej, ale w podsieci publicznej.
  2. Utwórz reguły grupy zabezpieczeń dla klastra pamięci podręcznej i instancji NAT.
  3. Zatwierdź zasady.
  4. Dodaj regułę iptables do instancji NAT.
  5. Upewnij się, że zaufany klient może połączyć się z klastrem.
  6. Zapisz konfigurację iptables.

Bardziej szczegółowy opis znajduje się w przewodniku AWS:

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


Nie chcę instancji NAT, chcę to sprawdzić przez minutę. Odpowiedź Rico jest dokładnie tym, czego chciałem.
Pysis

6

Nie tak stare pytanie, sam pobiegłem do tego samego problemu i rozwiązałem go:

Czasami z powodów programistycznych potrzebujesz dostępu z zewnątrz (aby uniknąć wielu wdrożeń tylko po to, aby naprawić błąd?)

Amazon opublikował nowy przewodnik, który wykorzystuje EC2 jako proxy dla świata zewnętrznego:

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

Powodzenia!


3
Dla porównania podejście, o którym wspomina Amazon, to instancja NAT.
russellpierce

Do Twojej wiadomości, z dokumentacji: "To podejście powinno być używane wyłącznie do celów testowych i programistycznych. Nie jest zalecane do użytku produkcyjnego"
jasonjonesutah

1
Tak, to prawda @jasonjonesutah. Wspomniałem o tym w mojej odpowiedzi. Bardzo zły pomysł na produkcję, ale doskonały na rozwój.
Shay Elkayam,

4

Używamy HAProxy jako zarezerwowanego serwera proxy.

Twój system poza AWS ---> Internet -> HAProxy z publicznym adresem IP -> Amazon Redis (Elasticache)

Zauważ, że jest inny dobry powód, aby to zrobić (w tym czasie)

Ponieważ używamy klienta node.js, który nie obsługuje przełączania awaryjnego Amazon DNS, sterownik klienta nie obsługuje ponownego wyszukiwania nazw DNS. Jeśli redis zakończy się niepowodzeniem, sterownik klienta będzie nadal łączyć się ze starym serwerem głównym, który jest slave po awarii.

Używając HAProxy, rozwiązał ten problem.

Teraz, korzystając z najnowszego sterownika ioredis, obsługuje przełączanie awaryjne amazon dns.


1
aktualizacja dla node.js, teraz ioredis obsługuje przełączanie awaryjne DNS. Jeśli używasz nazwy hosta DNS, możesz automatycznie przełączać awaryjnie bez HAProxy.
teddychan

4

BTW, jeśli ktoś chce rozwiązanie Windows EC2, wypróbuj je w wierszu poleceń DOS (na wspomnianym komputerze z systemem Windows EC2):

Aby dodać przekierowanie portów

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

Aby wyświetlić listę portów przekierowanych na porty

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

Słuchaj na IPv4: Połącz się z IPv4:

Adres Port Adres Port


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

Aby usunąć przekierowanie portów

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


3

To jest solidny skrypt węzłowy, który wykona całą brudną robotę za Ciebie. Przetestowano i zweryfikowano, że działa.

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

Jak korzystać z użycia: uzyskuje-flexibleache-tunnel [opcje] [polecenie]

Polecenia:

start [filename]  start tunneling with configuration file (default: config.json)
stop              stop tunneling
status            show tunneling status

Opcje:

-h, --help     output usage information
-V, --version  output the version number

Przykład użycia

  • start - uzys-flexibleache-tunnel start ./config.json
  • stop - uzys-elastyczny-stop tunelowy
  • status - uzys-elastyczny-stan tunelu

1

Nie jest możliwy bezpośredni dostęp do klasycznego klastra z instancji VPC. Rozwiązaniem byłoby skonfigurowanie translatora adresów sieciowych w klasycznej instancji.

NAT musi mieć proste proxy 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

Podałeś tę samą odpowiedź w poniższym poście, który ma inne wymagania. Jak to może działać również w danym scenariuszu? stackoverflow.com/questions/38066908/ ...
abby37

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.