Как подключиться к кластеру AWS ElastiCache из AWS CloudFront с помощью Node.js ?

#node.js #amazon-web-services #redis #amazon-cloudfront #amazon-elasticache

#node.js #amazon-веб-сервисы #redis #amazon-облачный интерфейс #amazon-elasticache

Вопрос:

Я новичок в AWS CloudFront и AWS в целом. У меня есть Next.js веб-сайт (React SSR framework), который я развернул на AWS с помощью serverless-nextjs (https://github.com/serverless-nextjs/serverless-next.js ). Однако мне также нужно какое-то кэширование для моего веб-приложения. Я решил использовать redis ElastiCache от AWS. Я создал кластер redis ElastiCache на консоли AWS.

Моя попытка:

Я настраиваю код для подключения к redis ElastiCache следующим образом:

 import redis from 'redis';
...

export async function getServerSideProps() { // Server side function for Next.js
    const cache = redis.createClient(6379, "{PRIMARY-ENDPOINT-URL-AWS}");
}
 

и я запускаю веб-сайт локально на своем компьютере. Однако я получаю сообщение об ошибке тайм-аута от redis: Error: connect ETIMEDOUT .

Как я смогу подключиться к кластеру redis ElastiCache с CloudFront и на моем локальном компьютере?

Скриншот окна кластера redis ElastiCache:

redis эластичная боль

Комментарии:

1. Можно ли вручную попасть в конечную точку кластера Redis, например, с помощью telnet ( telnet long-aws-url 6379 )? Если нет, то это, вероятно, связано с настройками сети в вашем кластере, и вам следует изучить подсети и группы безопасности (разрешает ли это общедоступный трафик или трафик, по крайней мере, с вашего IP-адреса и т. Д.).

2. Есть ли у вас функция аутентификации Redis, для которой требуется включить шифрование Intransit?

3. @ZacAnger У меня нет telnet на моем Mac. Не могли бы вы рассказать мне, как это сделать с ssh помощью?

4. @BaluVyamajala Это связано с AWS? Как бы я проверил?

5. Вы не можете использовать ssh для управляемого Redis, потому что он управляемый :). Я бы рекомендовал иметь несколько удобных инструментов, таких как telnet , curl , и nc установленных в любом случае. Вы можете установить telnet с brew install telnet помощью . Если вы не настроили аутентификацию и шифрование при создании кластера Elasticache, вы, вероятно, не настроили его, я не думаю, что это значения по умолчанию. Если вы можете безопасно исключить сетевые настройки (то есть, если вы можете использовать этот порт по этому URL-адресу со своего компьютера и lambda) и можете исключить включение шифрования при передаче, то это может быть проблема с кодом.

Ответ №1:

Вы не можете подключиться к ES извне (т.е. С вашей локальной рабочей станции) AWS напрямую. Домены ES предназначены для доступа только из ваших ресурсов (например, экземпляров) в том же VPC, что и ваш домен ES. Из документов:

Elasticache — это сервис, предназначенный для внутреннего использования в вашем VPC. Внешний доступ не рекомендуется из-за задержки интернет-трафика и проблем безопасности. Однако, если для целей тестирования или разработки требуется внешний доступ к Elasticache, это можно сделать через VPN.

Единственный способ включить подключения из-за пределов AWS к вашей ES — это установить VPN-соединение между домашней / рабочей сетью или прямое подключение, как описано в документах AWS:

Этот сценарий также поддерживается при условии наличия подключения между VPC клиентов и центром обработки данных либо через VPN, либо через Direct Connect.

Однако для быстрой настройки ad-hok вы можете использовать ssh-туннель между вашей локальной рабочей станцией и доменом ES. Для этого потребуется некоторый экземпляр jump / basion EC2, через который будет проходить туннель.

Комментарии:

1. Хорошо, но serverless-nextjs веб-сайт развертывается в AWS CloudFront. Даже если я загружу туда и перейду на веб-сайт с URL-адресом CloufFront, он все равно выдает мне ошибку. И даже если бы это сработало, был бы единственный способ протестировать веб-сайт локально — использовать упомянутое решение для туннелирования VPN / SSH?

2. @Jacnial CloudFront не работает внутри VPC. Это то же самое, как если бы вы пытались подключиться из дома / с работы.

3. О, я понимаю. Можно ли поместить его с помощью VPC?

4. @Jacnial Нет, это не так. Но вы уверены, что вам нужен полностью управляемый кластер ES с 3 узлами? Может быть, вы можете развернуть свой собственный на экземпляре или docker?

5. Я не уверен, что это такое, оно уже создало их, когда я создавал свой кластер redis ElastiCache. Я локально развернул базу данных redis в docker, и она хорошо работала на моем локальном компьютере, но я не уверен, где я мог бы запустить ее на AWS для своего веб-сайта.