Не удается подключиться к общедоступной c доступной AWS RDS - PullRequest
1 голос
/ 20 марта 2020

Я запускал серверное веб-приложение на лямбде внутри VP C и подключался к экземпляру Aurora- MySQL RDS с правилами входящего трафика, разрешающими трафик c из группы безопасности лямбды. Соединение работал нормально, однако, довольно часто лямбда-холодный старт давал мне тайм-аут. После некоторых исследований я обнаружил, что запуск лямбды на VP C приносит дополнительные затраты при запуске, и я увидел рекомендацию в более чем 1 месте, чтобы не использовать лямбду на VP C, за исключением случаев, когда вам строго необходим доступ некоторый ресурс в VP C.

Итак, я решил переместить мой RDS в общедоступный экземпляр, чтобы моя лямбда могла получить к нему доступ через inte rnet и удалить лямбду из VP C.

Итак, я изменил опцию RDS Public accessibility на Yes и отредактировал группу безопасности, чтобы разрешить входящее соединение с любого IP. Я также удалил VP C из лямбды, поэтому лямбда больше не работает на VP C. Я подумал, что этого будет достаточно.

Но затем моя лямбда не смогла подключиться к база данных, которую я пытался подключить с помощью локального клиента, опять-таки, ошибка

попыталась пропинговать имя хоста, получил тайм-ауты запроса

Немного покопавшись, я обнаружил, что мой экземпляр БД su bnet группа с некоторыми частными подсетями может быть проблемой (?) Итак, я создал новую группу su bnet только с подсетями publi c и попытался переместить мой экземпляр db в новую группу su bnet. но получил это сообщение:

You cannot move DB instance my-instance to subnet group my-new-group. The specified DB subnet group and DB instance are in the same VPC.

Хорошо, похоже, что я не могу перейти к другому su bnet в том же VP C, я начал пытаться создать новый VP C, но, похоже, это не правильно, и я уверен, что здесь есть что-то еще, чего мне не хватает.

Я также читал о ACL в сети и подумал, что это может быть проблемой, но мои правила кажется, все в порядке, с правилом по умолчанию, позволяющим любой т raffi c (и правило * для DENY)

ALL Traffic ALL ALL 0.0.0.0/0 ALLOW

Мои настройки сети RDS

Subnet group
default

Subnets
subnet-11111111
subnet-22222222
subnet-33333333
subnet-44444444
subnet-55555555
subnet-66666666

Security
VPC security groups
default (sg-111111)
( active )

Public accessibility
Yes

Правила входящих в мою группу безопасности

Type Protocol Port range    Source  Description - optional
All traffic All All 0.0.0.0/0   -
All traffic All All ::/0    -

Все еще не могу подключиться, не могу подключиться к моему локальному клиенту, даже не могу пропинговать его:

Подключиться через мой локальный клиент

Can't connect to MySQL server on 'my-instance.xxxxxxxxxx.us-east-1.rds.amazonaws.com' 
ping my-instance.xxxxxxx.us-east-1.rds.amazonaws.com
PING ec2-xx-xx-xx-xx.compute-1.amazonaws.com (xx.xx.xx.xx): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2

Любой Идея о том, что мне здесь не хватает?

ОБНОВЛЕНИЕ

Мой VP C имеет доступ inte rnet (я могу получить доступ к службам inte rnet из него, не проблема), у меня есть Inte rnet Gateway и NAT Gateway.

Я использую Zappa для лямбда-развертывания, которое заботится о создании функции поддержки ... однако, Я знаю, что одновременные запросы все еще могут быть проблемой

Проблема с VP C в лямбде заключается в том, что он может добавить 10 секунд при холодном старте, что для некоторых из моих вариантов использования бесполезно: https://www.freecodecamp.org/news/lambda-vpc-cold-starts-a-latency-killer-5408323278dd/

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Помимо включения доступа «publi c» для вашего экземпляра RDS, вам необходимо включить inte rnet для VP C с помощью шлюза inte rnet. После того, как вы подключите его к VP C, вам необходимо направить данные из подсетей базы данных в шлюз inte rnet. Проверьте здесь

Но я бы не советовал вам выставлять свою базу данных таким образом. Если у вас есть проблемы с лямбда-холодным стартом, вы должны создать событие, чтобы оставалось теплым .

1 голос
/ 20 марта 2020

Вещи, которые вам нужны:

  • Создать новую группу su bnet с VP по умолчанию C
  • назначить два su bnet для зоны доступности
  • , затем измените свой экземпляр RDS
  • , измените su bnet group на вновь созданную группу
  • , пометьте "Публичный доступ" на Yes.
  • Убедитесь, что ваш VP C использует шлюз inte rnet или нет.

Проверьте лямбда-группу безопасности, открыта ли она для исходящего соединения для порта базы данных, недоступна или нет.

Нет необходимости создавать разные VP C для RDS. Использовать VP по умолчанию C.

В соответствии с рекомендациями @stargazer, старайтесь не выставлять публично или вне VP C. Хорошо работает внутри VP C.

...