Você pode se conectar ao Amazon ElastiСache Redis fora da Amazon?


93

Consigo me conectar a uma instância ElastiCache Redis em um VPC de instâncias EC2 . Mas eu gostaria de saber se existe uma maneira de se conectar a um nó ElastiCache Redis fora das instâncias do Amazon EC2, como a partir da minha configuração de dev local ou instâncias VPS fornecidas por outros fornecedores.

Atualmente, ao tentar a partir da minha configuração local:

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

Eu só consigo um tempo limite depois de algum tempo.

Respostas:


75

Atualização 2018

A resposta anterior foi precisa quando escrita, no entanto, agora é possível, com alguma configuração, acessar o cache do Redis de fora usando as instruções de Acessando recursos do ElastiCache de fora da AWS


Resposta Antiga

Não, você não pode sem recorrer a 'truques', como um túnel, que pode ser bom para o teste, mas eliminará qualquer benefício real de usar um cache super-rápido com a latência / sobrecarga adicionada.

A antiga FAQ em Como usar o Amazon ElastiCache dentro de um VPC é diferente de usá-lo fora? :

Um cluster do Amazon ElastiCache, dentro ou fora de um VPC, nunca pode ser acessado da Internet

No entanto, este idioma foi removido no faq atual


1
Este ainda é o caso? Os documentos não dizem mais isso - afirmam que o redis é regido por políticas de grupo de segurança padrão, mas ainda não consigo acessar meu nó do redis, apesar disso. Golpeie isso. Ref recém movido: Os nós do Amazon ElastiCache, implantados em um VPC, nunca podem ser acessados ​​da Internet ou de instâncias EC2 fora do VPC.
metalaureato de

7
Eu sinto que 'matar' é um pouco forte. Por exemplo, não obtemos nenhum impacto significativo no desempenho ao executar nossos aplicativos fora do AWS (por meio de tal túnel). As despesas gerais do túnel são minúsculas em comparação com as operações do banco de dados, carregamento do navegador, E / S de disco e assim por diante.
sming


98

O encaminhamento de porta SSH deve resolver o problema. Tente executar isso em seu cliente.

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

Então, de seu cliente

redis-cli -h 127.0.0.1 -p 6379

Funciona para mim.

Observe que a porta padrão para redis 6379não é 6739. Certifique-se também de permitir que o grupo de segurança do nó EC2 que você está usando se conecte à sua instância do redis em seu grupo de segurança Cache.

Além disso, a AWS agora oferece suporte para acessar seu cluster mais informações aqui


Obrigado por apontar a porta, apenas um erro de digitação. Então, você está dizendo que o tunelamento SSH por meio do EC2 é a única maneira de obter acesso a um nó elasticache fora da Amazon? Obrigado,
Loic Duros

Isso está correto, assim como @EJBrennan mencionou na outra resposta.
Rico

Como podemos revogar o encaminhamento de porta ssh ...?
Muthukumar K

você pode matar o processo ssh. No Linux: kill -9 <pid>
Rico

27

Essas respostas estão desatualizadas.

Você pode acessar o cache elástico fora da AWS seguindo estas etapas:

  1. Crie uma instância NAT no mesmo VPC que seu cluster de cache, mas em uma sub-rede pública.
  2. Crie regras de grupo de segurança para o cluster de cache e a instância NAT.
  3. Valide as regras.
  4. Adicione uma regra iptables à instância NAT.
  5. Confirme se o cliente confiável é capaz de se conectar ao cluster.
  6. Salve a configuração do iptables.

Para uma descrição mais detalhada, consulte o guia do aws:

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


Não quero uma instância NAT, quero verificar por um minuto. A resposta de Rico é exatamente o que eu queria.
Pysis

6

Pergunta não tão velha, eu mesmo corri para o mesmo problema e resolvi:

Às vezes, por motivos de desenvolvimento, você precisa acessar de fora (para evitar várias implantações apenas para uma simples correção de bug, talvez?)

A Amazon publicou um novo guia que usa o EC2 como proxies para o mundo exterior:

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

Boa sorte!


3
Para referência, a abordagem que a Amazon menciona é uma instância NAT.
russellpierce

Para sua informação, dos documentos: "Esta abordagem deve ser usada apenas para fins de teste e desenvolvimento. Não é recomendada para uso em produção"
jasonjonesutah

1
Sim, é verdade, @jasonjonesutah. Também mencionei isso na minha resposta. Uma ideia muito ruim para produção, mas excelente para desenvolvimento.
Shay Elkayam

4

Estamos usando o HAProxy como um servidor proxy reservado.

Seu sistema fora da AWS ---> Internet -> HAProxy com IP público -> Amazon Redis (Elasticache)

Observe que há outro bom motivo para fazer isso (naquele momento)

Como usamos o cliente node.js, que não oferece suporte ao failover do Amazon DNS, o driver do cliente não oferece suporte a pesquisa de DNS novamente. Se o redis falhar, o driver do cliente continuará conectado ao antigo mestre, que é escravo após o failover.

Ao usar o HAProxy, ele resolveu esse problema.

Agora usando o driver ioredis mais recente, ele suporta failover dns amazon.


1
atualização para node.js, agora ioredis suporta failover de DNS. Se você usar o nome de host DNS, pode ocorrer failover automático sem HAProxy.
teddychan

4

BTW, se alguém quiser uma solução Windows EC2, tente no prompt do DOS (na referida máquina Windows EC2):

Para adicionar encaminhamento de porta

C: \ Usuários \ 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 listar portas encaminhadas por porta

C: \ Usuários \ Administrador>netsh interface portproxy show all

Ouça no ipv4: Conecte-se ao ipv4:

Endereço Porta Endereço Porta


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

Para remover o encaminhamento de porta

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


3

Este é um script de nó sólido que fará todo o trabalho sujo para você. Testado e verificado se funcionou.

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

Como usar o uso: uzys-elasticache-tunnel [opções] [comando]

Comandos:

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

Opções:

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

Exemplo de uso

  • start - uzys-elasticache-tunnel start ./config.json
  • parar - parada do túnel uzys-elasticache
  • status - status do túnel uzys-elasticache

1

Não é possível acessar diretamente o cluster clássico de uma instância VPC. A solução alternativa seria configurar o NAT na instância clássica.

O NAT precisa ter um proxy tcp simples

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

Você deu a mesma resposta na postagem mencionada abaixo também, que tem requisitos diferentes. Como pode funcionar no cenário dado também ?? stackoverflow.com/questions/38066908/…
abby37

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.