【问题标题】:Serverless deployed lambda not invoking callbacks.无服务器部署的 lambda 不调用回调。
【发布时间】:2018-09-09 07:58:09
【问题描述】:

我对无服务器很陌生,遇到了一个奇怪的情况。我创建了一个 lambda 函数,它列出了 cognito 用户池中的用户。我已经使用cognitoidentityserviceprovider.listUsers 从用户池中获取用户列表。

我尝试使用无服务器框架创建 lambda 函数。一切正常,但从未触发listUsers 的回调。cloudwatch 中没有错误日志,在超时之前什么也没有发生。我厌倦了直接从 lambda 控制台创建测试函数并在那里使用相同的代码,并且测试函数运行良好。我正在从测试函数中获取用户列表。

谁能告诉我这里发生了什么。如果您想了解更多信息,请告诉我。我很乐意把它修好。我不希望有两种媒介来处理我目前拥有的 lambda 函数(无服务器框架和 lambda 控制台)。

【问题讨论】:

  • 我实际上遇到了类似的问题,就我而言,它与 vpcs 有关。你能展示你是如何配置你的 serverless.yml 的吗?还可以尝试查看两个 lambda 之间是否存在差异
  • @dege 我暂时没有使用任何 VPC。

标签: aws-lambda serverless-framework aws-cognito


【解决方案1】:

发生这种情况是因为您尝试从 Lambda 内部调用异步方法。

当 AWS 调用您的 Lambda 时,它只会调用您在部署 Lambda 时指定的处理程序方法。当该方法返回时,AWS 将运行您的代码的容器置于休眠状态,直到收到另一个请求。

在这种情况下,发生的事情可能是您调用了异步的 cognito list users 调用,并且您的 main 方法在收到回调响应之前运行完成。 AWS 然后让容器进入睡眠状态,这会终止与 cognito 的连接,因此您永远不会收到响应。

除非存在用户调用的 cognito 列表的同步变体,否则您必须弄清楚如何使调用阻塞并等待代码中的响应,或者找到另一种调用 cognito 的方法。

由于 cognito 是一项 AWS 服务,我很确定您只是使用错误的 SDK 或 API 调用变体从 lambda 内部与 cognito 进行交互。

【讨论】:

  • 感谢您提供有用的信息。我会对此做更多的研究。再次感谢您的回复。
  • 我还有一个疑问;如果 AWS 根据您的信息工作,那么为什么当我直接从 Lambda 控制台创建函数时它可以工作,而在使用无服务器框架部署时它不能工作。
猜你喜欢
  • 2019-03-02
  • 2021-07-09
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 2021-10-07
  • 2020-01-29
相关资源
最近更新 更多