Бессерверное приложение Django (AWS Lambda через Zappa) истекает при попытке OAuth в Twitter

У меня есть приложение Django, чтобы использовать django-allauth для подключения к Twitter. Все потоки работают локально, и я выполнил те же шаги настройки в Lambda, чтобы добавить свои токены, сайт и т. Д.

Когда я пытаюсь получить доступ к URL-адресу входа (/accounts/twitter/login/), запрос в конечном итоге истекает с этим сообщением от AWS Lambda:

{"message": "Endpoint request timed out"}

Последнее сообщение от zappa tail перед событием тайм-аута:

[1619019159940] [DEBUG] 2021-04-21T15:32:39.939Z 7f66a0e3-58de-4612-82c0-54590d69676f Starting new HTTPS connection (1): api.twitter.com:443

Я видел, что у шлюзов есть 30-секундный тайм-аут, но я не думаю, что это должно занимать так много времени. Локально занимает пару секунд.

Кто-нибудь, знакомый с этими платформами, знает, где может быть узкое место и где может быть проблема? Или есть какие-то острые вопросы, которые помогут отладить?

То, что я уже проверил и (предварительно) исключил:

  • Серверная часть базы данных - это AWS Aurora Serverless, и я действительно беспокоился, что двойная бессерверная установка может вызывать медленные скорости. Однако простой вызов команды управления Django (zappa manage dev migrate возвращает занимает меньше секунды, поэтому я это пока исключил. Плюс панель администратора загружается нормально, которая также обращается к БД.
  • У меня есть URL-адреса разработчика и действующие URL-адреса, добавленные в панель управления Twitter в качестве действительных URL-адресов обратного вызова OAuth.

person Phil Sheard    schedule 21.04.2021    source источник
comment
Вы пытались с помощью AWS X-Ray идентифицировать ваше узкое место в производительности?   -  person Franco Morero    schedule 21.04.2021
comment
Нет, я не знал об этой функции. Я проверю и опубликую любые полезные результаты, если это не решит полностью.   -  person Phil Sheard    schedule 21.04.2021
comment
К сожалению, ничего полезного там нет. Я просматривал журналы в реальном времени во время тестирования, и это те же сообщения о неудавшемся запросе Twitter.   -  person Phil Sheard    schedule 21.04.2021
comment
Находится ли ваша лямбда в VPC. Это не имеет ничего общего с производительностью. Это проблема сети.   -  person Jens    schedule 21.04.2021
comment
@Jens Да, хороший момент. Я предполагал, что я могу подключиться через Интернет, что лямбда также сможет устанавливать исходящие подключения. Я выясню, нужно ли разрешать исходящие соединения на 80 и 443.   -  person Phil Sheard    schedule 21.04.2021
comment
@Jens, вы были правы, дело в том, что я работаю в VPC (требуется для бессерверных БД AWS RDS). Вам необходимо настроить дополнительные службы, такие как шлюз NAT, для доступа к общедоступному Интернету. Это противоречит цели отказа от сервера для этого приложения, потому что это почасовая оплата, поэтому я рассмотрю альтернативы.   -  person Phil Sheard    schedule 22.04.2021


Ответы (1)


Оставлю этот ответ, чтобы облегчить будущие поиски, хотя это не тот путь, которым я буду следовать.

Спасибо @Jens в комментариях за указание на проблему VPC. Вам необходимо добавить службу шлюза NAT в Lambda, чтобы добавить общедоступный доступ в Интернет к частному VPC.

Чтобы предоставить доступ в Интернет для вашей функции, связанный с ней VPC должен иметь шлюз NAT (или экземпляр NAT) в общедоступной подсети.

Источник: https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/

Это почасовая дополнительная оплата, поэтому использование бессерверного режима может лишить вас смысла (если вы используете его за небольшую плату и простоту, а не масштабируемость, как я).

person Phil Sheard    schedule 22.04.2021
comment
Пожалуйста, примите ваш ответ как ответ на свой вопрос. Это разрешено. - person Jens; 22.04.2021
comment
@ Дженс, спасибо, я сделаю это завтра, как только таймер позволит. - person Phil Sheard; 22.04.2021