#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:
Комментарии:
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 для своего веб-сайта.