带 SQS 触发器的 AWS Lambda,SQS Lambda 目的地,从不添加到目的地队列

AWS Lambda w/ SQS trigger, SQS Lambda Destinations, never adds to destination queue

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

设置为从 QUEUE_A 触发,对有效负载主体进行一些修改,然后在 成功 时将其发送到 QUEUE_B,或者 QUEUE_ERRORS 失败

QUEUE_BQUEUE_ERRORS 在 lambda 函数上设置为 Destinations

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

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

我已经尝试将 QUEUE_A 配置为没有 retry/deadletter - 如果我这样做,如果记录不佳,它将永远重试(无论我将 visibility/retries 设置得有多低).

接下来我可以尝试什么?


编辑:
CloudWatch 向我展示了我期望看到的内容 - 我在 "good" 记录上看到了良好的日志,并且在 "bad" 记录上看到了 traces/exceptions,所以这在函数本身 AFAIK 中不是问题。


编辑: 用 SNS 触发器和目标替换 SQS 触发器和目标是有效的。所以,我认为这与 SQS 同步和 SNS 异步有关吗?有人知道吗?

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

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

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

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