尝试 OAuth 到 Twitter 时,无服务器 Django 应用程序(通过 Zappa 的 AWS Lambda)超时

Posted

技术标签:

【中文标题】尝试 OAuth 到 Twitter 时,无服务器 Django 应用程序(通过 Zappa 的 AWS Lambda)超时【英文标题】:Serverless Django app (AWS Lambda via Zappa) times out when trying to OAuth to Twitter 【发布时间】: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 上的出站连接。 【参考方案1】:

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

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

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

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

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

【讨论】:

请接受您的回答作为对您问题的回答。这是允许的。 @Jens 谢谢,明天定时器允许后我会这样做。

以上是关于尝试 OAuth 到 Twitter 时,无服务器 Django 应用程序(通过 Zappa 的 AWS Lambda)超时的主要内容,如果未能解决你的问题,请参考以下文章

Twitter OAuth

CSP 拒绝 API Twitter

使用 MEAN.js Restful 无会话 API 后端的 Oauth 社交登录

尝试请求令牌时出现 Twitter API 错误

我正在尝试通过 twitter oauth 在 twitter 上发布图片,但它给出了错误 http 500

为啥我的 twitter oauth 访问令牌无效/过期