Amazon ElastiСache Redis'e Amazon dışında bağlanabilir misiniz?


93

Bir bağlanabiliyor değilim ElastiCache bir VPC içinde Redis örneği dan EC2 örneklerini . Ancak Amazon EC2 bulut sunucuları dışındaki bir ElastiCache Redis düğümüne, yerel geliştirici kurulumumdan veya diğer satıcılar tarafından sağlanan VPS bulut sunucularından bağlanmanın bir yolu olup olmadığını öğrenmek istiyorum .

Şu anda yerel kurulumumdan denerken:

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

Sadece bir süre sonra mola alıyorum.

Yanıtlar:


75

2018 Güncellemesi

Önceki cevap, yazıldığında doğruydu, ancak artık bazı yapılandırmayla redis önbelleğine AWS Dışından ElastiCache Kaynaklarına Erişme yönergelerine göre dışarıdan erişmek mümkün.


Eski Cevap

Hayır, tünel gibi 'hilelere' başvurmadan yapamazsınız, bu test için uygun olabilir, ancak ek gecikme / ek yük ile süper hızlı bir önbellek kullanmanın gerçek faydalarını ortadan kaldırır.

Eski SSS altında nasıl dışarıda kullanmasını bir VPC farklı iç Amazon ElastiCache kullanıyor? :

VPC'nin içindeki veya dışındaki bir Amazon ElastiCache Kümesine İnternetten erişilmesine hiçbir zaman izin verilmez

Ancak, bu dil mevcut SSS'de kaldırılmıştır.


1
Hala durum bu mu? Dokümanlar artık bunu söylemiyor - redis'in standart güvenlik grubu politikalarına tabi olduğunu iddia ediyorlar, ancak buna rağmen yine de redis düğümüme erişemiyorum. Şuna çarp. Ref az önce taşındı: Bir VPC içinde dağıtılan Amazon ElastiCache Düğümlerine hiçbir zaman İnternetten veya VPC dışındaki EC2 Bulut Sunucularından erişilemez.
metalaureate

7
'Öldürmenin' biraz güçlü olduğunu hissediyorum. Örneğin, uygulamalarımızı AWS dışında (böyle bir tünel aracılığıyla) çalıştırırken önemli bir performans düşüşü yaşamıyoruz. Tünelin genel giderleri, DB işlemleri, tarayıcı yükü, disk G / Ç vb. İle karşılaştırıldığında çok küçüktür.
sming


98

SSH bağlantı noktası yönlendirmesi hile yapmalıdır. Bunu müşterinizden çalıştırmayı deneyin.

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

Sonra müşterinizden

redis-cli -h 127.0.0.1 -p 6379

Benim için çalışıyor.

REDIS için varsayılan bağlantı noktası olduğunu unutmayınız 6379değil 6739. Ayrıca, redis örneğinize Cache güvenlik grubunuza bağlanmak için kullandığınız EC2 düğümünün güvenlik grubuna izin verdiğinizden emin olun.

Ayrıca AWS artık kümenize buradan daha fazla bilgiye erişmeyi destekliyor


Bağlantı noktasını gösterdiğin için teşekkürler, sadece bir yazım hatası. Öyleyse, EC2 üzerinden SSH tünellemesinin Amazon dışındaki bir elastik ağ düğümüne erişmenin tek yolu olduğunu mu söylüyorsunuz? Teşekkürler,
Loic Duros

Bu, diğer cevapta bahsedilen @EJBrennan gibi doğru.
Rico

Ssh port yönlendirmesini nasıl iptal edebiliriz ...?
Muthukumar K

ssh sürecini öldürebilirsiniz. Linux'ta: kill -9 <pid>
Rico

27

Bu cevaplar güncel değil.

Aşağıdaki adımları izleyerek AWS'nin dışındaki elastik önbelleğe erişebilirsiniz:

  1. Önbellek kümenizle aynı VPC'de ancak genel bir alt ağda bir NAT örneği oluşturun.
  2. Önbellek kümesi ve NAT örneği için güvenlik grubu kuralları oluşturun.
  3. Kuralları onaylayın.
  4. NAT örneğine bir iptables kuralı ekleyin.
  5. Güvenilen istemcinin kümeye bağlanabildiğini doğrulayın.
  6. İptables yapılandırmasını kaydedin.

Daha ayrıntılı bir açıklama için aws kılavuzuna bakın:

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


Bir NAT örneği istemiyorum, bir dakika kontrol etmek istiyorum. Rico'nun cevabı tam olarak istediğim şeydi.
Pysis

6

Çok eski bir soru değil, kendim de aynı soruna koştum ve çözdüm:

Bazen, gelişmekte olan nedenlerden dolayı dışarıdan erişmeniz gerekir (çoklu dağıtımlardan kaçınmak için sadece basit bir hata düzeltmesi için belki?)

Amazon, EC2'yi dış dünya için vekil olarak kullanan yeni bir kılavuz yayınladı:

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

İyi şanslar!


3
Referans olarak Amazon'un bahsettiği yaklaşım bir NAT örneğidir.
russellpierce

Bilginize, dokümanlardan: "Bu yaklaşım yalnızca test ve geliştirme amacıyla kullanılmalıdır. Üretimde kullanım için önerilmez"
jasonjonesutah

1
Evet, bu doğru @jasonjonesutah Ben de cevabımda bundan bahsetmiştim. Üretim için çok kötü bir fikir ama geliştirme için mükemmel.
Shay Elkayam

4

Ayrılmış bir proxy sunucusu olarak HAProxy kullanıyoruz.

AWS dışındaki sisteminiz ---> İnternet -> Genel IP'li HAProxy -> Amazon Redis (Elasticache)

Bunu yapmak için başka bir iyi neden olduğuna dikkat edin (o sırada)

Amazon DNS yük devretmeyi desteklemeyen node.js istemcisini kullandığımız için, istemci sürücüsü tekrar dns aramasını desteklemiyor. Redis başarısız olursa, istemci sürücüsü, başarısız olduktan sonra bağımlı olan eski ana yöneticiye bağlanmaya devam edecektir.

HAProxy'yi kullanarak bu sorunu çözdü.

Şimdi en son ioredis sürücüsünü kullanarak, amazon dns yük devretmeyi destekler.


1
node.js için güncelleme, artık ioredis DNS yük devretmeyi destekliyor. DNS ana bilgisayar adını kullanırsanız, HAProxy olmadan otomatik olarak yük devretme yapılabilir.
teddychan

4

BTW, bir Windows EC2 çözümü isterse, bunları DOS komut isteminde deneyin (Windows EC2 makinesinde):

Bağlantı noktası yönlendirme eklemek için

C: \ Kullanıcılar \ Yönetici>netsh interface portproxy add v4tov4 listenport=6379 listenaddress=10.xxx.64.xxx connectport=6379 connectaddress=xxx.xxxxxx.ng.0001.use1.cache.amazonaws.com

Bağlantı noktası yönlendirmeli bağlantı noktalarını listelemek için

C: \ Kullanıcılar \ Yönetici>netsh interface portproxy show all

İpv4'te dinleyin: ipv4'e bağlanın:

Adres Bağlantı Noktası Adres Bağlantı Noktası


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

Bağlantı noktası yönlendirmeyi kaldırmak için

C: \ Kullanıcılar \ Yönetici>netsh interface portproxy delete v4tov4 listenport=6379 listenaddress=10.xxx.128.xxx


3

Bu, sizin için tüm kirli işleri yapacak sağlam bir düğüm betiğidir. Test edildi ve çalıştığını doğruladı.

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

Kullanım nasıl kullanılır: uzys-Elasticache-tunnel [options] [command]

Komutlar:

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

Seçenekler:

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

Kullanım Örneği

  • başlangıç ​​- uzys-Elasticache-tunnel start ./config.json
  • durdurma - uzys-Elasticache-tunnel stop
  • durum - uzys-Elasticache-tunnel status

1

Klasik kümeye bir VPC örneğinden doğrudan erişmek mümkün değildir. Çözüm, NAT'ı klasik örnekte yapılandırmak olacaktır.

NAT'ın basit bir tcp proxy'si olması gerekir

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

Aşağıda belirtilen yazıda da aynı cevabı verdiniz, ki bu da farklı şartlara sahip. Verilen senaryoda da nasıl çalışabilir? stackoverflow.com/questions/38066908/…
abby37

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.