web-dev-qa-db-fra.com

Pouvez-vous vous connecter à Amazon Elasticache Redis en dehors d'Amazon

Je peux me connecter à un instance Elasticache Redis dans un VPC à partir de instances EC2, mais j'aimerais savoir s'il existe un moyen de se connecter à un nœud Elasticache Redis en dehors d'instances Amazon EC2, telles que celles de ma configuration de développement locale ou d'instances VPS fournies par d'autres fournisseurs.

Actuellement en essayant de mon installation locale:

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

Je ne reçois un délai d'attente qu'après un certain temps.

72
Loic Duros

Non, vous ne pouvez pas recourir à des "astuces" telles qu'un tunnel, ce qui peut convenir à des tests, mais supprime tout avantage réel de l'utilisation d'un cache ultra-rapide avec une latence/un temps système supplémentaire.

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

Depuis ici: http://aws.Amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDIT 2018: Cette réponse ci-dessus était exacte au moment de la rédaction. Cependant, il est maintenant possible, avec certaines configurations, d'accéder à la mémoire cache redis de l'extérieur en utilisant les instructions approximatives 1/2. en bas de cette page: https://docs.aws.Amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html

61
E.J. Brennan

Le transfert de port SSH devrait faire l'affaire. Essayez d'exécuter ceci à partir de votre client.

ssh -f -N -L6379:<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 est 6379 ne 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.

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

77
Rico

Ces réponses sont obsolètes.

Vous pouvez accéder àastic-cache en dehors d'AWS en procédant comme suit:

  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. Valider les règles.
  4. Ajoutez une règle iptables à l’instance NAT.
  5. Vérifiez que le client approuvé est capable de se connecter au cluster.
  6. Enregistrez la configuration iptables.

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

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

21
cscan

Pas si vieille question, j'ai couru moi-même vers le même problème et je l'ai résolu:

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

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

http://docs.aws.Amazon.com/AmazonElastiCache/latest/UserGuide/Access.Outside.html

Bonne chance!

6
Shay Elkayam

Nous utilisons HAProxy en tant que serveur proxy réservé.

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

Notez qu’il existe une autre bonne raison de le faire (à ce moment-là)

Étant donné que nous utilisons le client node.js, qui ne prend pas en charge le basculement Amazon DNS, le pilote du client ne prend pas en charge la recherche DNS. Si la redis échoue, le pilote client restera connecté à l'ancien maître, qui est esclave après un basculement.

En utilisant HAProxy, le problème a été résolu.

Utilisant maintenant le dernier pilote ioredis, il prend en charge le basculement Amazon DNS.

4
teddychan

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

Pour ajouter un transfert 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 lister les ports transférés

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

Écoutez 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 le transfert de port

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

4
sming

Ceci est un script de nœud solide qui fera tout le travail sale pour vous. Testé et vérifié cela a fonctionné.

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

Comment utiliser Usage: 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 - uzys -asticache-tunnel start ./config.json
  • stop - arrêt de tunnel
  • statut - statut uzys-elasticache-tunnel
3
TWilly

Il n'est pas possible d'accéder directement au cluster classique à partir d'une instance de VPC. La solution de contournement serait de 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
1
Malinga

J'ai résolu en utilisant cette documentation Amazon il est dit que vous devrez installer stunnel sur votre autre machine ec2.

https://aws.Amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/

0
ShreePrakash