Чи можете ви підключитися до Amazon ElastiСache Redis за межами Amazon?


90

Я можу підключитися до екземпляра ElastiCache Redis у VPC з екземплярів EC2 . Але я хотів би знати, чи є спосіб підключитися до вузла ElastiCache Redis поза екземплярами Amazon EC2, наприклад, з моєї локальної установки розробника або екземплярів VPS, наданих іншими постачальниками.

В даний час при спробі з мого локального налаштування:

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

Я отримую тайм-аут лише через деякий час.

Відповіді:


75

Ні, ви не можете не вдаватися до таких "хитрощів", ​​як тунель, що, можливо, добре для тестування, але вбиває будь-яку реальну користь від використання надшвидкого кешу з доданою затримкою / накладними витратами.

... кластер Amazon ElastiCache, всередині або поза VPC, ніколи не має доступу до Інтернету .

Звідси: http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDIT 2018: Ця відповідь була точною, коли вона була написана, однак тепер з деякою конфігурацією можна отримати доступ до кешу redis ззовні, використовуючи вказівки приблизно на 1/2 шляху цієї сторінки: https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
Це все ще так? Документи цього більше не говорять - вони стверджують, що redis регулюється стандартною груповою політикою безпеки, але я все ще не можу отримати доступ до свого вузла redis, незважаючи на це. Вражайте це. Посилання щойно перенесено: Вузли Amazon ElastiCache, розгорнуті у VPC, ніколи не можуть отримати доступ з Інтернету або з Екземплярів EC2 поза VPC.
металауреат

7
Я відчуваю, що "вбити" трохи сильно. Наприклад, ми не отримуємо помітного показника продуктивності під час запуску наших програм поза AWS (через такий тунель). Накладні витрати на тунель незначні в порівнянні з операціями з БД, завантаженням браузера, введенням-виведенням диска тощо.
sming


94

Переадресація портів SSH повинна зробити трюк. Спробуйте запустити це від свого клієнта.

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

Тоді від вашого клієнта

redis-cli -h 127.0.0.1 -p 6379

Це працює для мене.

Зверніть увагу, що порт для Redis за замовчуванням 6379не є 6739. Також переконайтеся, що ви дозволили дозволити групу безпеки вузла EC2, яку ви використовуєте для підключення до вашого екземпляра redis до вашої групи безпеки Cache.

Крім того, AWS тепер підтримує доступ до вашого кластера тут


Дякуємо, що вказали на порт, просто помилка. Отже, ви хочете сказати, що тунелювання SSH через EC2 - це єдиний спосіб отримати доступ до вузла еластичного за межами Amazon? Дякую,
Loic Duros

Це правильно, як і @EJBrennan, згаданий в іншій відповіді.
Ріко

Як ми можемо відкликати переадресацію портів ssh ...?
Muthukumar K

ви можете вбити процес ssh. На Linux: kill -9 <pid>
Ріко

27

Ці відповіді застаріли.

Ви можете отримати доступ до еластичного кешу поза AWS, виконавши такі дії:

  1. Створіть екземпляр NAT у тому самому VPC, що і ваш кластер кешу, але у загальнодоступній підмережі.
  2. Створіть правила групи безпеки для кластера кешу та екземпляра NAT.
  3. Перевірте правила.
  4. Додайте правило iptables до екземпляра NAT.
  5. Переконайтеся, що надійний клієнт може підключитися до кластера.
  6. Збережіть конфігурацію iptables.

Для більш детального опису див. Керівництво aws:

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


Я не хочу екземпляра NAT, я хочу перевірити його протягом хвилини. Відповідь Ріко - саме те, що я хотів.
Pysis

6

Не таке давнє запитання, я сам перейшов до того ж питання і вирішив його:

Іноді з причин розвитку вам потрібен доступ іззовні (щоб уникнути багаторазового розгортання лише для простого виправлення помилок?)

Amazon опублікувала новий посібник, який використовує EC2 як проксі для зовнішнього світу:

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

Удачі!


3
Для довідки підхід, про який згадує Amazon, є екземпляром NAT.
russellpierce

FYI, з документації: "Цей підхід слід використовувати лише для тестування та розробки. Він не рекомендується для виробничого використання"
jasonjonesutah

1
Так, це правда @jasonjonesutah Я також згадав про це у своїй відповіді. Дуже погана ідея для виробництва, але відмінна для розвитку.
Шей Елкаям

4

Ми використовуємо HAProxy як зарезервований проксі-сервер.

Ваша система поза AWS ---> Інтернет -> HAProxy із загальнодоступним IP -> Amazon Redis (Elasticache)

Зверніть увагу, що для цього є ще одна вагома причина (на той час)

Оскільки ми використовуємо клієнт node.js, який не підтримує відмову Amazon DNS, драйвер клієнта не підтримує пошук dns знову. Якщо redis не вдається, драйвер клієнта продовжить підключатися до старого ведучого, який є веденим після помилки.

Використовуючи HAProxy, він вирішив цю проблему.

Тепер, використовуючи найновіший драйвер ioredis, він підтримує відмову Amazon dns.


1
оновлення для node.js, тепер підтримка ioredis DNS завершена. Якщо ви використовуєте ім'я хосту DNS, воно може бути автоматично відмовлено без HAProxy.
teddychan

4

До речі, якщо хтось хоче рішення Windows EC2, спробуйте їх у підказці DOS (на вказаній машині Windows EC2):

Щоб додати переадресацію портів

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

Перерахувати перенаправлені порти

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

Слухайте на ipv4: Підключіться до ipv4:

Адреса Порт Адреса Порт


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

Щоб видалити переадресацію портів

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


3

Це надійний сценарій вузла, який зробить за вас всю брудну роботу. Перевірено та перевірено, що це спрацювало.

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

Як використовувати Використання: uzys-elasticache-tunnel [параметри] [команда]

Команди:

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

Варіанти:

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

Приклад використання

  • старт - старт uzys-elasticache-tunnel ./config.json
  • зупинка - зупинка uzys-elasticache-tunnel
  • статус - статус тунелю uzys-elasticache-tunnel

1

Неможливо безпосередньо отримати доступ до класичного кластера з екземпляра VPC. Обхідним шляхом було б налаштування NAT на класичному екземплярі.

NAT повинен мати простий проксі-сервер 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

Ви відповіли ту саму відповідь і в згаданому нижче дописі, до якого пред'являються різні вимоги. Як це також може працювати в даному сценарії ?? stackoverflow.com/questions/38066908 / ...
abby37

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.