Puoi connetterti ad Amazon ElastiСache Redis al di fuori di Amazon?


93

Sono in grado di connettermi a un'istanza ElastiCache Redis in un VPC da istanze EC2 . Ma vorrei sapere se esiste un modo per connettersi a un nodo ElastiCache Redis al di fuori delle istanze di Amazon EC2, ad esempio dalla mia configurazione di sviluppo locale o dalle istanze VPS fornite da altri fornitori.

Attualmente, quando provo dalla mia configurazione locale:

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

Ho solo un timeout dopo un po 'di tempo.

Risposte:


75

Aggiornamento 2018

La risposta precedente era accurata al momento della scrittura, tuttavia ora è possibile, con alcune configurazioni, accedere alla cache redis dall'esterno utilizzando le indicazioni in base all'accesso alle risorse di ElastiCache dall'esterno di AWS


Vecchia risposta

No, non puoi senza ricorrere a "trucchi" come un tunnel, che forse va bene per i test ma ucciderà qualsiasi reale vantaggio dell'utilizzo di una cache super veloce con la latenza / sovraccarico aggiunto.

Le vecchie domande frequenti in In che modo l'utilizzo di Amazon ElastiCache all'interno di un VPC è diverso dall'utilizzo all'esterno? :

Non è mai consentito l'accesso da Internet a un cluster Amazon ElastiCache, all'interno o all'esterno di un VPC

Tuttavia, questa lingua è stata rimossa nelle attuali faq


1
È ancora così? I documenti non lo dicono più: affermano che il redis è governato da criteri di gruppo di sicurezza standard, ma nonostante ciò non riesco ancora ad accedere al mio nodo redis. Colpiscilo. Ref appena spostato: i nodi Amazon ElastiCache, distribuiti all'interno di un VPC, non sono mai accessibili da Internet o da istanze EC2 al di fuori del VPC.
metalaureato

7
Penso che "uccidere" sia un po 'forte. Ad esempio, non otteniamo un apprezzabile calo delle prestazioni quando eseguiamo le nostre app al di fuori di AWS (tramite un tale tunnel). I costi generali del tunnel sono minuscoli rispetto alle operazioni del database, al caricamento del browser, all'I / O del disco e così via.
sming


98

Il port forwarding SSH dovrebbe fare il trucco. Prova a eseguirlo dal tuo client.

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

Quindi dal tuo cliente

redis-cli -h 127.0.0.1 -p 6379

Per me funziona.

Tieni presente che la porta predefinita per redis 6379non lo è 6739. Assicurati inoltre di consentire al gruppo di sicurezza del nodo EC2 che stai utilizzando di connettersi all'istanza redis nel tuo gruppo di sicurezza Cache.

Inoltre, AWS ora supporta l'accesso al tuo cluster per maggiori informazioni qui


Grazie per aver segnalato la porta, solo un errore di battitura. Quindi, stai dicendo che il tunneling SSH attraverso EC2 è l'unico modo per ottenere l'accesso a un nodo elasticache al di fuori di Amazon? Grazie,
Loic Duros

È corretto proprio come @EJBrennan menzionato nell'altra risposta.
Rico

Come possiamo revocare il port forwarding ssh ...?
Muthukumar K

puoi uccidere il processo ssh. Su Linux: kill -9 <pid>
Rico

27

Queste risposte sono obsolete.

Puoi accedere alla cache elastica all'esterno di AWS seguendo questi passaggi:

  1. Crea un'istanza NAT nello stesso VPC del cluster di cache ma in una sottorete pubblica.
  2. Crea regole del gruppo di sicurezza per il cluster di cache e l'istanza NAT.
  3. Convalida le regole.
  4. Aggiungi una regola iptables all'istanza NAT.
  5. Verificare che il client attendibile sia in grado di connettersi al cluster.
  6. Salva la configurazione di iptables.

Per una descrizione più dettagliata, vedere la guida aws:

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


Non voglio un'istanza NAT, voglio controllarla per un minuto. La risposta di Rico è esattamente quello che volevo.
Pysis

6

Domanda non così vecchia, sono corso allo stesso problema e l'ho risolto:

A volte, per motivi di sviluppo è necessario accedere dall'esterno (per evitare multi-implementazioni forse solo per una semplice correzione di bug?)

Amazon ha pubblicato una nuova guida che utilizza l'EC2 come proxy per il mondo esterno:

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

In bocca al lupo!


3
Per riferimento, l'approccio menzionato da Amazon è un'istanza NAT.
russellpierce

Cordiali saluti, dai documenti: "Questo approccio dovrebbe essere utilizzato solo per scopi di test e sviluppo. Non è raccomandato per l'uso in produzione"
jasonjonesutah

1
Sì, è vero @jasonjonesutah, l'ho anche menzionato nella mia risposta. Una pessima idea per la produzione ma eccellente per lo sviluppo.
Shay Elkayam

4

Stiamo utilizzando HAProxy come server proxy riservato.

Il tuo sistema all'esterno di AWS ---> Internet -> HAProxy con IP pubblico -> Amazon Redis (Elasticache)

Nota che c'è un'altra buona ragione per farlo (in quel momento)

Poiché utilizziamo il client node.js, che non supporta il failover di Amazon DNS, il driver del client non supporta nuovamente la ricerca DNS. Se il redis non riesce, il driver client manterrà la connessione al vecchio master, che è slave dopo il failover.

Utilizzando HAProxy, ha risolto il problema.

Ora utilizzando l'ultimo driver ioredis, supporta il failover dns di amazon.


1
aggiornamento per node.js, ora ioredis supporta il failover DNS. Se si utilizza il nome host DNS, è possibile eseguire il failover automatico senza HAProxy.
teddychan

4

A proposito, se qualcuno vuole una soluzione Windows EC2, provale al prompt del DOS (su detta macchina Windows EC2):

Per aggiungere il port forwarding

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

Per elencare le porte port forwarded

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

Ascolta su ipv4: connettiti a ipv4:

Porta indirizzo Porta indirizzo


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

Per rimuovere il port forwarding

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


3

Questo è uno script di nodo solido che farà tutto il lavoro sporco per te. Testato e verificato che ha funzionato.

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

Come utilizzare Utilizzo: uzys-elasticache-tunnel [opzioni] [comando]

Comandi:

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

Opzioni:

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

Esempio di utilizzo

  • start - uzys-elasticache-tunnel start ./config.json
  • stop - fermata uzys-elasticache-tunnel
  • status - stato uzys-elasticache-tunnel

1

Non è possibile accedere direttamente al cluster classico da un'istanza VPC. La soluzione alternativa sarebbe configurare NAT sull'istanza classica.

NAT necessita di un semplice 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

Hai dato la stessa risposta anche nel post menzionato di seguito, che ha requisiti diversi. Come può funzionare anche nello scenario dato ?? stackoverflow.com/questions/38066908/...
abby37

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.