【问题标题】:AWS Lambda w/ SQS trigger, SQS Lambda Destinations, never adds to destination queueAWS Lambda w/ SQS 触发器,SQS Lambda 目标,从不添加到目标队列
【发布时间】:2020-04-27 09:52:18
【问题描述】:

我有一个从 SQS 队列触发的简单 lambda 函数,我正在使用新的 Lambda Destinations 功能。

设置为从QUEUE_A触发,对payload主体做一些修改,然后成功发送给QUEUE_B失败发送给QUEUE_ERRORS强>。

QUEUE_BQUEUE_ERRORS 在 lambda 函数上设置为 Destination

当我从 CLI 触发 lambda 时,我在 QUEUE_B 上获得了良好记录,在 QUEUE_ERRORS 上获得了不良记录。所以,它似乎正在工作。

但是,当从 SQS 触发 lambda 时,我从未QUEUE_BQUEUE_ERRORS 上获得记录。好的记录会运行 lambda,如果记录不好,它会转到 QUEUE_A_DEADLETTER,这是我不想要的。

我已尝试将 QUEUE_A 配置为没有重试/死信 - 如果我这样做,如果记录不好,它将永远重试(无论我将可见性/重试设置得有多低)。

接下来我可以尝试什么?


编辑
CloudWatch 准确地向我展示了我希望看到的内容 - 我在“好”记录上看到了良好的日志,在“坏”记录上看到了堆栈跟踪/异常,所以这在函数本身 AFAIK 中不是问题。


编辑: 用 SNS 触发器和目标替换 SQS 触发器和目标正在工作。那么,我认为这与 SQS 同步和 SNS 异步有关吗?有人知道吗?

【问题讨论】:

  • 听起来您在 Lambda 函数中遇到了错误。您是否查看过 CloudWatch Logs 以查看 Lambda 函数的日志输出?您还可以添加一些额外的调试来查看SendMessage() 调用是否成功。
  • CloudWatch 在我的“好”记录上显示良好的日志,在我的“坏”记录上显示异常。 SendMessage() 在哪里定义?我不想在功能代码中推送到SQS,只是作为一个目的地。我还希望 QUEUE_ERRORS 出现“坏”记录,但事实并非如此。
  • 啊!它使用新的AWS Lambda Destinations 功能。抱歉,你不需要SendMessage()

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

如果您同步调用 Lambda 函数,则不会触发目的地。

Destinations 的主要用例是了解 Lambda 函数的异步执行结果,主要是为了更深入地了解请求和响应上下文、有效负载、异常堆栈跟踪等执行细节。因此,如果同步调用 Lambda (例如,使用 cli 或通过 SQS 触发器),不会将任何消息传递到 Destinations 端点。

当您使用 CLI 时,您会使用 aws lambda invoke-async。相反,如果您使用 aws lambda invoke(同步执行 Lambda),您将看到同样的问题,您的目标端点将不会收到消息。

您可以将 Destinations 端点保持为 SQS(您将在上面的文章中看到一个工作示例),但您的 Lambda 触发器必须更改为异步触发器。

【讨论】:

  • 伙计,这太令人失望了!为什么我们不能为 SQS 触发器设置失败目标?我有一批 lambda,如果他们遇到任何错误调用,我想全部点击 SNS。
  • 我一直在寻找缺失的部分,在这里,这个答案对我帮助很大。我现在有点困惑,我如何使 lambda 设置它应该被异步调用???或者我应该如何让秘密管理器异步调用 lambda??
  • 这个帮助只有我们需要根据最新的 cli 命令调用 aws lambda invoke \ --function-name lambdaname \ --invocation-type Event \ --payload '{ "name": "Bob" }' \ response.json
猜你喜欢
  • 2020-05-17
  • 2020-07-28
  • 2018-03-01
  • 1970-01-01
  • 2016-04-13
  • 2021-01-22
  • 2021-03-28
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多