【问题标题】:Serverless Django app (AWS Lambda via Zappa) times out when trying to OAuth to Twitter尝试 OAuth 到 Twitter 时,无服务器 Django 应用程序(通过 Zappa 的 AWS Lambda)超时
【发布时间】:2021-07-15 20:09:01
【问题描述】:

我有一个 Django 应用设置,可以使用 django-allauth 连接到 Twitter。该流程全部在本地运行,我在 Lambda 上按照相同的设置步骤添加我的令牌、站点等。

当我尝试访问登录网址 (/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 作为有效的 OAuth 回调 URL 添加到 Twitter 的仪表板中。

【问题讨论】:

  • 您是否尝试使用AWS X-Ray 来确定您的性能瓶颈?
  • 不,我不知道这个功能。如果不能完全解决,我会检查并发布任何有用的结果。
  • 那里没什么用,很遗憾。我在测试时一直在查看日志,这是关于失败的 Twitter 请求的相同消息。
  • 您的 Lambda 在 VPC 中。这与“性能”无关。这是网络问题。
  • @Jens 是的,很好。我假设我能够通过网络连接,lambda 也能够进行出站连接。我将研究是否需要允许 80 和 443 上的出站连接。

标签: django twitter aws-lambda oauth zappa


【解决方案1】:

留下这个答案以帮助以后的搜索,虽然这不是我要走的路。

感谢 cmets 中的 @Jens 指出 VPC 问题。您需要将 NAT 网关服务添加到 Lambda 以将公共 Internet 访问添加到私有 VPC。

“要授予对您的函数的 Internet 访问权限,其关联的 VPC 必须在公共子网中具有 NAT 网关(或 NAT 实例)。”

来源:https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/

这是按小时计费的额外费用,因此可能会破坏使用无服务器的意义(如果您使用它是为了小额费用和简单性,而不是像我一样扩大规模)。

【讨论】:

  • 请接受您的回答作为对您问题的回答。这是允许的。
  • @Jens 谢谢,明天定时器允许后我会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2019-04-17
相关资源
最近更新 更多