Pouvez-vous vous connecter à Amazon ElastiСache Redis en dehors d'Amazon?


90

Je peux me connecter à une instance ElastiCache Redis dans un VPC à partir d' instances EC2 . Mais j'aimerais savoir s'il existe un moyen de se connecter à un nœud ElastiCache Redis en dehors des instances Amazon EC2, comme à partir de ma configuration de développement local ou des instances VPS fournies par d'autres fournisseurs.

Actuellement en essayant depuis ma configuration locale:

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

Je n'ai un temps mort qu'après un certain temps.

Réponses:


75

Non, vous ne pouvez pas sans recourir à des `` astuces '' telles qu'un tunnel, qui peut-être bien pour les tests, mais qui tueront tout avantage réel de l'utilisation d'un cache ultra-rapide avec la latence / la surcharge supplémentaires.

... un cluster Amazon ElastiCache, à l'intérieur ou à l'extérieur d'un VPC, n'est jamais autorisé à accéder à partir d'Internet .

De là: http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDIT 2018: Cette réponse ci-dessus était exacte une fois écrite, mais il est maintenant possible avec une certaine configuration d'accéder au cache Redis de l'extérieur en utilisant les directions à environ 1/2 sur cette page: https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
Est-ce toujours le cas? Les documents ne le disent plus - ils prétendent que redis est régi par des stratégies de groupe de sécurité standard, mais je ne peux toujours pas accéder à mon nœud redis malgré cela. Frappez ça. Ref vient d'être déplacé: les nœuds Amazon ElastiCache, déployés dans un VPC, ne sont jamais accessibles depuis Internet ou depuis des instances EC2 en dehors du VPC.
metalaureate

7
Je pense que «tuer» est un peu fort. Par exemple, nous n'obtenons aucun impact appréciable sur les performances lors de l'exécution de nos applications en dehors d'AWS (via un tel tunnel). Les frais généraux du tunnel sont minuscules par rapport aux opérations DB, à la charge du navigateur, aux E / S disque, etc.
sming le


94

La redirection de port SSH devrait faire l'affaire. Essayez de l'exécuter à partir de votre client.

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

Puis de votre client

redis-cli -h 127.0.0.1 -p 6379

Ça marche pour moi.

Veuillez noter que le port par défaut pour redis 6379ne l' est pas 6739. Assurez-vous également que vous autorisez le groupe de sécurité du nœud EC2 que vous utilisez à se connecter à votre instance redis dans votre groupe de sécurité Cache.

De plus, AWS prend désormais en charge l'accès à votre cluster pour plus d'informations ici


Merci d'avoir signalé le port, juste une faute de frappe. Alors, êtes-vous en train de dire que le tunnel SSH via EC2 est le seul moyen d'accéder à un nœud Elasticache en dehors d'Amazon? Merci,
Loic Duros

C'est correct, tout comme @EJBrennan mentionné dans l'autre réponse.
Rico

Comment pouvons-nous révoquer la redirection de port ssh ...?
Muthukumar K

vous pouvez tuer le processus ssh. Sous Linux: kill -9 <pid>
Rico

27

Ces réponses ne sont pas à jour.

Vous pouvez accéder au cache élastique en dehors d'AWS en suivant ces étapes:

  1. Créez une instance NAT dans le même VPC que votre cluster de cache mais dans un sous-réseau public.
  2. Créez des règles de groupe de sécurité pour le cluster de cache et l'instance NAT.
  3. Validez les règles.
  4. Ajoutez une règle iptables à l'instance NAT.
  5. Confirmez que le client approuvé est capable de se connecter au cluster.
  6. Enregistrez la configuration iptables.

Pour une description plus détaillée, consultez le guide aws:

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


Je ne veux pas d'instance NAT, je veux la vérifier pendant une minute. La réponse de Rico est exactement ce que je voulais.
Pysis

6

Question pas si ancienne, j'ai couru moi-même sur le même problème et l'ai résolu:

Parfois, pour des raisons de développement, vous devez accéder de l'extérieur (pour éviter les déploiements multiples juste pour une simple correction de bogue peut-être?)

Amazon a publié un nouveau guide qui utilise l'EC2 comme proxy pour le monde extérieur:

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

Bonne chance!


3
Pour référence, l'approche mentionnée par Amazon est une instance NAT.
russellpierce

FYI, d'après la documentation: "Cette approche doit être utilisée à des fins de test et de développement uniquement. Elle n'est pas recommandée pour une utilisation en production"
jasonjonesutah

1
Oui, c'est vrai @jasonjonesutah J'ai également mentionné cela dans ma réponse. Une très mauvaise idée pour la production mais excellente pour le développement.
Shay Elkayam

4

Nous utilisons HAProxy comme serveur proxy réservé.

Votre système en dehors d'AWS ---> Internet -> HAProxy avec IP publique -> Amazon Redis (Elasticache)

Notez qu'il y a une autre bonne raison de le faire (à ce moment-là)

Comme nous utilisons le client node.js, qui ne prend pas en charge le basculement Amazon DNS, le pilote client ne prend pas en charge la recherche DNS à nouveau. Si le redis échoue, le pilote client continuera à se connecter à l'ancien maître, qui est esclave après le basculement.

En utilisant HAProxy, il a résolu ce problème.

Utilisant désormais le dernier pilote ioredis, il prend en charge le basculement amazon DNS.


1
mise à jour pour node.js, maintenant ioredis prend en charge le basculement DNS. Si vous utilisez le nom d'hôte DNS, il peut être basculé automatiquement sans HAProxy.
teddychan

4

BTW si quelqu'un veut une solution Windows EC2, essayez-les à l'invite DOS (sur ladite machine Windows EC2):

Pour ajouter une redirection de port

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

Pour répertorier les ports redirigés de port

C: \ Utilisateurs \ Administrateur>netsh interface portproxy show all

Écouter sur ipv4: Connectez-vous à ipv4:

Adresse Port Adresse Port


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

Pour supprimer la redirection de port

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


3

Il s'agit d'un script de nœud solide qui fera tout le sale boulot pour vous. Testé et vérifié, cela a fonctionné.

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

Comment utiliser Utilisation: uzys-elasticache-tunnel [options] [commande]

Commandes:

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

Options:

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

Exemple d'utilisation

  • start - démarrage du tunnel uzys-elasticache ./config.json
  • stop - arrêt uzys-elasticache-tunnel
  • status - état du tunnel uzys-elasticache-tunnel

1

Il n'est pas possible d'accéder directement au cluster classique à partir d'une instance de VPC. La solution de contournement consisterait à configurer NAT sur l'instance classique.

NAT doit avoir un simple 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

Vous avez également donné la même réponse dans le message mentionné ci-dessous, qui ont des exigences différentes. Comment cela peut-il fonctionner dans le scénario donné aussi ?? stackoverflow.com/questions/38066908/…
abby37

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.