¿Puede conectarse a Amazon ElastiСache Redis fuera de Amazon?


90

Puedo conectarme a una instancia de ElastiCache Redis en una VPC desde instancias EC2 . Pero me gustaría saber si hay una forma de conectarme a un nodo ElastiCache Redis fuera de las instancias de Amazon EC2, como desde mi configuración de desarrollo local o instancias de VPS proporcionadas por otros proveedores.

Actualmente, al intentarlo desde mi configuración local:

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

Solo tengo un tiempo de espera después de un tiempo.

Respuestas:


75

No, no puede sin recurrir a 'trucos' como un túnel, que tal vez esté bien para probar, pero eliminará cualquier beneficio real de usar un caché súper rápido con la latencia / sobrecarga adicional.

... nunca se puede acceder a un clúster de Amazon ElastiCache, dentro o fuera de una VPC, desde Internet .

Desde aquí: http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDITAR 2018: esta respuesta anterior fue precisa cuando se escribió, sin embargo, ahora es posible con alguna configuración acceder a la caché de redis desde el exterior usando las instrucciones aproximadamente a la mitad de esta página: https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
¿Sigue siendo así? Los documentos ya no dicen esto: afirman que redis se rige por políticas de grupo de seguridad estándar, pero todavía no puedo acceder a mi nodo de redis a pesar de eso. Golpea eso. Ref. Recién trasladada: No se puede acceder a los nodos de Amazon ElastiCache, implementados dentro de una VPC, desde Internet o desde instancias EC2 fuera de la VPC.
metalaureato

7
Siento que 'matar' es un poco fuerte. Por ejemplo, no obtenemos un impacto apreciable en el rendimiento cuando ejecutamos nuestras aplicaciones fuera de AWS (a través de dicho túnel). Los gastos generales del túnel son minúsculos en comparación con las operaciones de la base de datos, la carga del navegador, la E / S de disco, etc.
sming el


94

El reenvío de puertos SSH debería funcionar. Intente ejecutar esto desde su cliente.

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

Entonces de tu cliente

redis-cli -h 127.0.0.1 -p 6379

Esto funciona para mi.

Tenga en cuenta que el puerto predeterminado para redis 6379no es6739 . También asegúrese de permitir que el grupo de seguridad del nodo EC2 que está utilizando se conecte a su instancia de redis en su grupo de seguridad de caché.

Además, AWS ahora admite el acceso a su clúster. Más información aquí


Gracias por señalar el puerto, solo un error tipográfico. Entonces, ¿estás diciendo que el túnel SSH a través de EC2 es la única forma de obtener acceso a un nodo elasticache fuera de Amazon? Gracias,
Loic Duros

Eso es correcto al igual que @EJBrennan mencionó en la otra respuesta.
Rico

¿Cómo podemos revocar el reenvío de puertos ssh ...?
Muthukumar K

puede matar el proceso ssh. En Linux: kill -9 <pid>
Rico

27

Estas respuestas están desactualizadas.

Puede acceder a la caché elástica fuera de AWS siguiendo estos pasos:

  1. Cree una instancia NAT en la misma VPC que su clúster de caché, pero en una subred pública.
  2. Cree reglas de grupo de seguridad para el clúster de caché y la instancia NAT.
  3. Valida las reglas.
  4. Agregue una regla de iptables a la instancia NAT.
  5. Confirme que el cliente de confianza pueda conectarse al clúster.
  6. Guarde la configuración de iptables.

Para obtener una descripción más detallada, consulte la guía de AWS:

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


No quiero una instancia de NAT, quiero comprobarlo por un minuto. La respuesta de Rico es exactamente lo que quería.
Pysis

6

Pregunta no tan antigua, me encontré con el mismo problema y lo resolví:

A veces, por razones de desarrollo, necesita acceder desde el exterior (¿para evitar implementaciones múltiples solo por una simple corrección de errores, tal vez?)

Amazon ha publicado una nueva guía que utiliza el EC2 como proxy para el mundo exterior:

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

¡Buena suerte!


3
Como referencia, el enfoque que menciona Amazon es una instancia NAT.
russellpierce

Para su información, de los documentos: "Este enfoque debe usarse solo con fines de prueba y desarrollo. No se recomienda para uso en producción"
jasonjonesutah

1
Sí, eso es cierto @jasonjonesutah También mencioné esto en mi respuesta. Una muy mala idea para la producción pero excelente para el desarrollo.
Shay Elkayam

4

Estamos utilizando HAProxy como servidor proxy reservado.

Su sistema fuera de AWS ---> Internet -> HAProxy con IP pública -> Amazon Redis (Elasticache)

Tenga en cuenta que hay otra buena razón para hacer eso (en ese momento)

Como usamos el cliente node.js, que no admite la conmutación por error de DNS de Amazon, el controlador del cliente no admite la búsqueda de dns nuevamente. Si el redis falla, el controlador del cliente seguirá conectado al antiguo maestro, que es esclavo después de una falla.

Al usar HAProxy, resolvió ese problema.

Ahora, con el controlador ioredis más reciente, es compatible con la conmutación por error de amazon dns.


1
actualización para node.js, ahora ioredis admite conmutación por error de DNS. Si utiliza el nombre de host DNS, se puede realizar una conmutación por error automática sin HAProxy.
teddychan

4

Por cierto, si alguien quiere una solución de Windows EC2, pruébelos en el indicador de DOS (en dicha máquina de Windows EC2):

Para Agregar reenvío de puertos

C: \ Usuarios \ Administrador>netsh interface portproxy add v4tov4 listenport=6379 listenaddress=10.xxx.64.xxx connectport=6379 connectaddress=xxx.xxxxxx.ng.0001.use1.cache.amazonaws.com

Para enumerar los puertos reenviados

C: \ Usuarios \ Administrador>netsh interface portproxy show all

Escuche en ipv4: conéctese a ipv4:

Dirección Puerto Dirección Puerto


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

Para eliminar el reenvío de puertos

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


3

Este es un script de nodo sólido que hará todo el trabajo sucio por usted. Probado y verificado que funcionó.

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

Cómo utilizar Uso: uzys-elasticache-tunnel [opciones] [comando]

Comandos:

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

Opciones:

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

Ejemplo de uso

  • inicio - inicio del túnel uzys-elasticache-./config.json
  • parada - parada del túnel uzys-elasticache
  • estado - estado del túnel uzys-elasticache

1

No es posible acceder directamente al clúster clásico desde una instancia de VPC. La solución alternativa sería configurar NAT en la instancia clásica.

NAT necesita tener un proxy tcp simple

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

También dio la misma respuesta en la publicación mencionada a continuación, que tiene diferentes requisitos. ¿Cómo puede funcionar también en el escenario dado? stackoverflow.com/questions/38066908/…
abby37

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.