Dapatkah Anda terhubung ke Amazon ElastiСache Redis di luar Amazon?


90

Saya dapat terhubung ke instance ElastiCache Redis di VPC dari instance EC2 . Namun saya ingin tahu apakah ada cara untuk terhubung ke node ElastiCache Redis di luar instans Amazon EC2, seperti dari pengaturan dev lokal saya atau instans VPS yang disediakan oleh vendor lain.

Saat ini ketika mencoba dari pengaturan lokal saya:

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

Saya hanya mendapatkan waktu istirahat setelah beberapa waktu.

Jawaban:


75

Tidak, Anda tidak bisa tanpa menggunakan 'trik' seperti terowongan, yang mungkin OK untuk pengujian tetapi akan menghilangkan manfaat nyata menggunakan cache super cepat dengan tambahan latensi / overhead.

... Cluster Amazon ElastiCache, di dalam atau di luar VPC, tidak pernah diizinkan untuk diakses dari Internet .

Dari sini: http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDIT 2018: Jawaban di atas akurat saat ditulis, namun sekarang dimungkinkan dengan beberapa konfigurasi untuk mengakses redis cache dari luar menggunakan petunjuk sekitar 1/2 ke bawah halaman ini: https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
Apakah masih demikian? Dokumen tidak lagi mengatakan ini - mereka mengklaim redis diatur oleh kebijakan grup keamanan standar, tetapi saya masih tidak bisa mendapatkan akses ke node redis saya meskipun demikian. Pukul itu. Referensi baru saja dipindahkan: Amazon ElastiCache Nodes, yang diterapkan dalam VPC, tidak pernah dapat diakses dari Internet atau dari Instans EC2 di luar VPC.
metalaureate

7
Saya merasa 'membunuh' itu agak kuat. Misalnya kami tidak mendapatkan kinerja yang cukup besar saat menjalankan aplikasi kami di luar AWS (melalui terowongan seperti itu). Overhead terowongan sangat kecil dibandingkan dengan operasi DB, beban browser, I / O disk, dan sebagainya.
sming


94

Penerusan port SSH harus melakukan triknya. Coba jalankan ini dari klien Anda.

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

Kemudian dari klien Anda

redis-cli -h 127.0.0.1 -p 6379

Ini bekerja untuk saya.

Harap dicatat bahwa port default untuk redis 6379tidak 6739. Pastikan juga Anda mengizinkan grup keamanan node EC2 yang Anda gunakan untuk terhubung ke instans redis Anda ke grup keamanan Cache Anda.

Selain itu, AWS sekarang mendukung pengaksesan cluster Anda lebih banyak info di sini


Terima kasih telah menunjukkan portnya, hanya salah ketik. Jadi, apakah Anda mengatakan bahwa tunneling SSH melalui EC2 adalah satu-satunya cara untuk mendapatkan akses ke node elasticache di luar Amazon? Terima kasih,
Loic Duros

Itu benar seperti yang @EJBrennan sebutkan di jawaban lain.
Rico

Bagaimana kami dapat mencabut penerusan port ssh ...?
Muthukumar K

Anda dapat menghentikan proses ssh. Di Linux: kill -9 <pid>
Rico

27

Jawaban-jawaban ini sudah ketinggalan zaman.

Anda dapat mengakses elastic-cache di luar AWS dengan mengikuti langkah-langkah berikut:

  1. Buat instance NAT di VPC yang sama dengan cluster cache Anda, tetapi di subnet publik.
  2. Buat aturan grup keamanan untuk cluster cache dan instance NAT.
  3. Validasi aturannya.
  4. Tambahkan aturan iptables ke instance NAT.
  5. Konfirmasikan bahwa klien tepercaya dapat terhubung ke cluster.
  6. Simpan konfigurasi iptables.

Untuk penjelasan lebih rinci, lihat panduan aws:

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


Saya tidak ingin instance NAT, saya ingin memeriksanya sebentar. Jawaban Rico persis seperti yang saya inginkan.
Pysis

6

Pertanyaan yang tidak terlalu lama, saya sendiri mengalami masalah yang sama dan menyelesaikannya:

Terkadang, untuk mengembangkan alasan Anda perlu mengakses dari luar (untuk menghindari multi-penerapan hanya untuk perbaikan bug sederhana mungkin?)

Amazon telah menerbitkan panduan baru yang menggunakan EC2 sebagai proxy untuk dunia luar:

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

Semoga berhasil!


3
Untuk referensi, pendekatan yang disebutkan Amazon adalah instans NAT.
russellpierce

FYI, dari dokumen: "Pendekatan ini harus digunakan untuk tujuan pengujian dan pengembangan saja. Tidak disarankan untuk penggunaan produksi"
jasonjonesutah

1
Ya, benar @jasonjonesutah juga saya sebutkan di jawaban saya. Ide yang sangat buruk untuk produksi tetapi sangat baik untuk pengembangan.
Shay Elkayam

4

Kami menggunakan HAProxy sebagai server proxy yang dicadangkan.

Sistem Anda di luar AWS ---> Internet -> HAProxy dengan IP publik -> Amazon Redis (Elasticache)

Perhatikan bahwa ada alasan bagus lain untuk melakukan itu (pada saat itu)

Saat kami menggunakan klien node.js, yang tidak mendukung Amazon DNS fail over, driver klien tidak mendukung dns mencari lagi. Jika redis gagal, driver klien akan tetap terhubung ke master lama, yang merupakan slave setelah gagal selesai.

Dengan menggunakan HAProxy, itu memecahkan masalah itu.

Sekarang menggunakan driver ioredis terbaru, ini mendukung failover amazon dns.


1
update untuk node.js, sekarang ioredis mendukung DNS untuk gagal. Jika Anda menggunakan nama host DNS, itu bisa otomatis gagal tanpa HAProxy.
teddychan

4

BTW jika ada yang menginginkan solusi windows EC2, coba ini di DOS prompt (di mesin windows EC2 tersebut):

Untuk menambahkan port-forwarding

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

Untuk membuat daftar port yang diteruskan port

C: \ Users \ Administrator>netsh interface portproxy show all

Dengarkan di ipv4: Hubungkan ke ipv4:

Alamat Port Alamat Port


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

Untuk menghapus penerusan port

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


3

Ini adalah skrip node solid yang akan melakukan semua pekerjaan kotor untuk Anda. Diuji dan diverifikasi, ini berhasil.

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

Cara menggunakan Penggunaan: uzys-elasticache-tunnel [options] [command]

Perintah:

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

Pilihan:

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

Contoh Penggunaan

  • mulai - uzys-elasticache-tunnel mulai ./config.json
  • stop - uzys-elasticache-tunnel stop
  • status - status terowongan uzys-elasticache

1

Tidak mungkin untuk mengakses cluster klasik secara langsung dari instance VPC. Solusinya adalah mengonfigurasi NAT pada instance klasik.

NAT perlu memiliki proxy tcp sederhana

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

Anda juga memberikan jawaban yang sama di posting yang disebutkan di bawah ini, yang memiliki persyaratan berbeda. Bagaimana itu bisa bekerja dalam skenario yang diberikan juga ?? stackoverflow.com/questions/38066908/…
abby37

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.